
C++
程序猿BinZoo
这个作者很懒,什么都没留下…
展开
-
一张图帮你记住linux的vim指令(小伙伴门开来围观吧)
linux的vim那是相当强大,刚开始接触的同学们都会感觉好用但是记不住都是干嘛用的,现在我们就来了解一下非常基本的指令。(今天没时间了,找时间在里面加些例子)查找:/word 向下寻找word?word 向上寻找wordn向下重复查找刚才字符串N向上重复查找刚才字符串:n1,n2s/word1/word2/g 从n1行到n2行之间把word1替换为wo原创 2013-12-18 10:14:30 · 3129 阅读 · 0 评论 -
Visual Assist 相同内容高亮显示
使用Visual Assist 的时候突然高亮内容显示不出来了 经过一顿找,终于发现设置位置了,再次记录下来,大家没有设置的可以参考一下,使用很方便这里面有个Highlight refernces using顾名思义就是设置高亮的,设置一下在看下代码 一切ok原创 2014-01-02 10:37:34 · 7708 阅读 · 2 评论 -
大师的话一语道破.强烈建议阅读
现在的开发工作要求我们能够快速掌握一门语言。一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习;其二是花很多时间完整地把整个语言学习一遍,做到胸有成竹,然后再开始做实际工作。然而这两种方法都有弊病。第二种方法的问题当然很明显,不仅浪费了时间,偏离了目标,而且学习效率不高。因为没有实际问题驱动的语言学习通常是不牢固不深入的。有的人学着学着成了语言专家,反而忘了转载 2013-12-31 08:01:04 · 1048 阅读 · 0 评论 -
多线程及互斥锁整理
多线程及互斥锁整理多线程的创建这个函数是一个应用程序定义的函数的占位符,作为一个线程的起始地址。在调用CreateThread函数时,指定该地址。LPTHREAD_START_ROUTINE类型定义了该回调函数的指针。 ThreadProc是一个应用程序定义的函数的名称的占位符。DWORD WINAPI ThreadProc(LPVOID lpParameter);[1原创 2013-12-30 16:11:12 · 3176 阅读 · 0 评论 -
Linux下的多线程编程
1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。 为什么有了进程的概念后,还要再引入线程呢?使用转载 2013-12-29 21:01:33 · 664 阅读 · 0 评论 -
C++编译遇到参数错误(cannot convert parameter * from 'const char [**]' to 'LPCWSTR')
一看到上面的project configuration,有一个Character Set,因此我就对比了我上次编译通过的的工程配置和今天我新建的工程配置,下面是对比的图:第一幅图是今天编译出错时的配置,第二幅是测试上次编译通过时的配置,发现在Character Set选项里有区别,编译出错时是把Character Set设置成了Use Unicode Character Set转载 2013-12-28 21:19:13 · 4961 阅读 · 0 评论 -
centos5.4安装g++和gcc
gcc g++安装 包括软件的全包 还等什么 小伙伴们都惊呆了~~原创 2013-12-04 21:06:59 · 2992 阅读 · 0 评论 -
单例设计模式的一点总结
单例模式:1、什么叫做单例模式?单例模式保证一个类仅有一个实例,并且提供一个访问他的全局访问点。2、单例模式要解决什么问题?在游戏编程中,我们会在客户端给玩家提供一些面板,展示玩家属性,玩家背包,玩家技能等等。如果我们每一次都是去实例化一个对象,这个是否当玩家不断打开背包的时候,就可能出现无数个背包面板。3、单例模式怎么解决问题?那么怎么能只创建一个背包面板呢,这个时候我们原创 2013-12-10 23:16:26 · 1268 阅读 · 0 评论 -
清除系统垃圾脚本 windows
清楚系统垃圾自己定制哈哈把下面的脚本放到一个xxx.bat文件中然后根据自己的需求更改一下,双击执行就ok了@echo offecho 正在清除系统垃圾文件,请稍等......del /f /s /q %systemdrive%\*.tmpdel /f /s /q %systemdrive%\*._mpdel /f /s /q %systemdrive%\*.logde原创 2013-12-09 15:59:44 · 2208 阅读 · 0 评论 -
知其然知其所以然 itoa实现 整型转字符串
我们经常会遇到有求字符串转换为整型的问题,我们来分析一下其中实现过程,可以先分析一下思路;1、首先我们要求出来整型字符串的长度,这步可以遍历和除以10这样计算遍历次数就可以求的整型字符串长度2、我们对要操作的整数和10取余能算出各位数值,通过这个值 + ‘0’ 这样我们就可以计算出char型0的ascii码值,在通过将各个数赋值到char数组上上,最后这个char数组就是我们要求得的c原创 2013-11-30 14:49:56 · 1391 阅读 · 0 评论 -
gdb调试常用指令
一、首先使用gdb调试之前我们生成应用程序需要带有debug信息那么我们在生成可执行程序的时候首先应该带有 -g参数g++ -g server.cpp -o server二、进入gdb模式gdb三、常用命令1、gdb加载可执行文件(gdb) file serverReading symbols from /usr/cyCPP/myServer/server...do原创 2014-01-03 16:17:15 · 2241 阅读 · 0 评论 -
一张图说build背后的故事
我们在控制台打印hello过程究竟发生了什么事,然我们一起目睹 你们知道我们最平时写的最简单的程序hello都干了什么了吗下面让我们一起来看一下图:编译过程程序:#include using namespace std;#define pi 3.14int main(){ //see helloword in screen原创 2013-12-19 22:40:11 · 1332 阅读 · 0 评论 -
怎样破坏程序的堆栈?
为什么使用堆栈? 现代计算机被设计成能够理解人们头脑中的高级语言。 在使用高级语言构造程序时最重要的技术是过程(procedure)和函数(function)。 从这一点来看, 一个过程调用可以象跳转(jump)命令那样改变程序的控制流程, 但是与跳转不同的是, 当工作完成时, 函数把控制权返回给调用之后的语句或指令。这种高级抽象实现起来要靠堆栈的帮助。 堆栈也用于给函数中使用的局部变量动转载 2014-02-13 22:12:20 · 3828 阅读 · 0 评论 -
VC6.0 error LNK2001: unresolved external symbol _main解决办法
学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非常困难。 初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为: unre转载 2014-02-09 13:04:45 · 3358 阅读 · 0 评论 -
进程间通信
采用内存映射文件实现WIN32进程间的通讯:Windows中的内存映射文件的机制为我们高效地操作文件提供了一种途径,它允许我们在WIN32进程中保留一段内存区域,把目标文件映射到这段虚拟内存中。在程序实现中必须考虑各进程之间的同步问题。具体实现步骤如下:1、在服务器端进程中调用内存映射API函数CreateFileMapping创建一个有名字标识的共享内存;函数CreateFile转载 2014-01-16 16:49:47 · 665 阅读 · 0 评论 -
_beginthread不能正确调用返回0xffffffff
一、设定run_time libararyproject settings-> C/C++-> Category: Code Generation-> Use run-time libarary: 选 /MDd 或者/MD都行。如果还是不行就要看看你的堆栈空间大小是不是不够用了在link中看看你的/stack的值是多少 可以设置为0x200000原创 2014-01-23 12:23:21 · 1403 阅读 · 0 评论 -
#pragma pack(1) 的意义是什么
设置结构体的边界对齐为1个字节,也就是所有数据在内存中是连续存储的。比如你在C语言中定义下面这样的结构体:struct s {char ch;int i;};然后在主函数中写一句:printf("%d", sizeof(struct s))也就是输出结构体s所占的字节数你觉得输出结果会是多少呢?我们知道,char型占用1个字节,int型占4个字节,那么输出的结果是5吗转载 2013-12-27 17:15:53 · 950 阅读 · 0 评论 -
visual assist设置快捷键(其它安装的插件设置快捷键也在这里)
安装完visual assist后发现快捷键无法使用纠结,然后找如何去设置快捷建以此记录一下:在Tools-->customize-->Keyboard-->Add-ins常用的几个设置:1、Find ReferencesVAssistXFindReferences 一般设置为alt + f2、Find SymbolVAssistXFindSymbolDialog原创 2014-01-10 16:02:54 · 1584 阅读 · 0 评论 -
知其然知其所以然 atoi实现 字符串转整型
我们经常会遇到有求整型转成字符串的问题,我们来分析一下其中实现过程,可以先分析一下思路;1、第一步我们想到就是把字符串进行一遍遍历,将里面的数字取出来并且拼成我们的整型数;2、如何将我们取出来的数字转成整型数呢,当然我们取出来的是一个字符,我们知道字符的值都是ascii码表,我们我们难道还要记住对应每个字符数字的assii码的值吗,虽然我们可以记住常见的,但是没有必要我们知道0-9对应的a原创 2013-11-30 12:45:19 · 928 阅读 · 0 评论 -
Linux下生成动态链接库是否必须使用 -fPIC 的问题
在 Linux 下制作动态链接库,“标准” 的做法是编译成位置无关代码(Position Independent Code,PIC),然后链接成一个动态链接库。经常遇到的一个问题是 -fPIC 是不是必需,因为好像不加经常也能正常运行,只是创建 .so 的时候会有一个警告。搜索、试验了一下,答案似乎是这样:(1) 通常的建议是始终加上 -fPIC 生成位置无关代码;(2) AMD64转载 2013-11-07 10:26:02 · 806 阅读 · 0 评论 -
c++和lua交互
Lua是一个很好用的脚本语言,在游戏开发中可以和c++完美结合,我总结的几点使用和大家分享一下,第一c++如何调用lua脚本,第二c++如何调用脚本函数,第三脚本如何调用c++函数。环境:vc6.0编译器 Lua5.1(这个很简单,大家可以自行安装)环境准备好后我们就可以开始配置环境了:我的lua安装目录是:E:\Program Files\Lua\5.1一、原创 2013-09-23 13:10:30 · 747 阅读 · 0 评论 -
__declspec(dllimport)的作用
是时候总结一下__declspec(dllimport)的作用了。可能有人会问:__declspec(dllimport)和__declspec(dllexport)是一对的,在动态链接库中__declspec(dllexport)管导出,__declspec(dllimport)管导出,就像一个国家一样,有出口也有进口,有什么难理解的呢?这是一种很自然的思路,开始我也是这样理解。转载 2013-10-15 21:13:12 · 668 阅读 · 0 评论 -
C++ 获取当前正在执行的函数的相关信息
今天对C++ 工程里面的类里面的方法进行重新命名,发现以前写的一些调试信息也不得不修改:如:int main(int argc,char **argv){ cout}输出的结果是:Running In Function main以前,函数名是直接手动写到代码里面的,现在要改还数名,也要同时修改调试语句,这工程量蛮大的,就像找个一劳永逸 的方法。在网转载 2013-10-11 16:23:50 · 2535 阅读 · 0 评论 -
三十分钟掌握STL
三十分钟掌握STL 这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟内觉得有所收获,那么赶紧扔了它。文中我省略了很多东西。心疼那,浪费我两个晚上。 译者:kary contact:karymay@163.net STL概述 STL的一个重要特点是数据结构和转载 2013-08-27 14:42:11 · 689 阅读 · 0 评论 -
c++ vector中resize、reserve、push_back和capacity
一、 resize和reservehttp://www.diybl.com/course/3_program/c/c_js/2007109/77298.html resize就是重新分配大小,reserve就是预留一定的空间。这两个接口即存在差别,也有共同点。下面就它们的细节进行分析。 为实现resize的语义,resize接口做了两个保证:转载 2013-08-26 13:34:48 · 5867 阅读 · 0 评论 -
gdb core 进程异常退出 宕机dump来判断宕机原因
在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。 1.core文件的生成开关和大小限制 1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。 2) 使用ulimit -c files转载 2013-07-12 11:49:26 · 4206 阅读 · 0 评论 -
#pragma pack(push,1)与#pragma pack(1)的区别
转自:http://www.rosoo.net/a/201203/15889.html转载 2013-04-12 09:54:35 · 903 阅读 · 0 评论 -
c++计算单利和复利存款金额
//计算单利和复利存款金额#includeusing namespace std;double simpleinterest(double principal,double interestrate,int year);double compoundinterest(double principal,double interestrate,int year);原创 2013-04-11 10:23:03 · 4195 阅读 · 0 评论 -
vertor的assign用法
vector::assign //用来构造一个vector的函数,类似于copy函数void assign( size_type _Count, const Type& _Val);//_Count指要构造的vector成员的个数, _Val指成员的数值,他的类型必须与vector类型一致! template void assign( InputIterator _Fi转载 2013-04-11 09:50:49 · 1470 阅读 · 0 评论 -
vector的reserve和resize
vector 的reserve增加了vector的capacity,但是它的size没有改变!而resize改变了vector的capacity同时也增加了它的size!原因如下: reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用push_back()/insert()函数。 r转载 2013-04-11 10:07:09 · 592 阅读 · 0 评论 -
LPCTSTR
LPCTSTR用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。转载 2013-10-28 21:44:05 · 1631 阅读 · 0 评论 -
linux下如何产生core,调试core
在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。1.core文件的生成开关和大小限制 1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。 2)使用ulimit -c filesize命令,可转载 2013-10-29 09:54:34 · 642 阅读 · 0 评论 -
Linux/Unix环境下的make命令详解
无论是在linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要转载 2013-11-07 09:11:19 · 676 阅读 · 0 评论 -
linux预定义变量$@ $<
$@ : 规则的目标所对应的所有文件$例如:%.o : %.cpp $(HEADERS) $(CXX) $(CXXFlags) $(IncludeDir) -c $解释一下就是:%.o : %.cpp $(HEADERS) $(CXX) $(CXXFlags) $(IncludeDir) -c xxx.cpp -o xxx.o原创 2013-11-07 16:34:28 · 3091 阅读 · 0 评论 -
gcc和g++的区别
误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的转载 2013-11-06 21:21:01 · 600 阅读 · 0 评论 -
linux压缩和解压缩命令大全
.tar 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName --------------------------------------------- .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName转载 2013-11-05 17:07:00 · 490 阅读 · 0 评论 -
c++ 符号表分离———objcopy(调试信息挂载)
最近在做游戏的项目,项目中使用的服务器程序版本是release版本的,最近出现服务器宕机的情况,但是core文件通过gdb查看了一下宕机堆栈结果发现堆栈被破坏,可能的问题就是对指针和数组使用的不规范导致的。然后打算继续通过gdb来调试一下core文件查看一下相关的变量,但是结果令人失望,但是发现debug版本的是可以查看的。比较一下debug和release的区别。release的编译选项中不原创 2013-10-25 20:34:35 · 12554 阅读 · 2 评论 -
objcopy [选项]... 输入文件 [输出文件]
[功能] 将目标文件的一部分或者全部内容拷贝到另外一个目标文件中,或者实现目标文件的格式转换。 [描述] objcopy工具使用BFD库读写目标文件,它可以将一个目标文件的内容拷贝到另外一个目标文件当中。objcopy通过它的选项来控制其不同的动作,它可以将目标文件拷贝成和原来的文件不一样的格式。需要注意的是objcopy能够在两种格式之间拷贝一个完全链接的文件,在两种格式之间转载 2013-10-23 14:30:02 · 3538 阅读 · 0 评论 -
巧用backtrace系列函数,在不具备gdb环境的Linux系统上大致定位段错误位置
1: 段错误产生的原因简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.一旦一个程序发生了越界访问,系统就采取内存保护措施,并给那个程序发送SIGSEGV信号,程序接到那个信号后就知道segmentation fault出现了。想对”段错误”有更详细的了解可以去阅读“Linux下的段错误产生的原因及调试方法转载 2013-10-29 17:57:50 · 927 阅读 · 0 评论 -
linux下打印函数调用栈(stack backtrace in Linux)
今天遇到个这样的需求,希望能当动态链接库中抛出异常时,能把调用栈打印出来。经过在google上一翻搜寻,找到了一些线索。我的文件目录如下:当前目录下是main.cpp 和test/test下面是A.h, A.cpp(定义一个类)和backtrace.h, backtrace.cpp第一步,实现打印调用栈,backtrace函数实现如下:backtrace.cpp#inclu转载 2013-10-29 18:24:46 · 1857 阅读 · 0 评论