酒鬼z

我自将心向明月,独卧沙场醉圆缺

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

文章分类 -  C++

摘要:转自:http://bbs.ednchina.com/BLOG_ARTICLE_479334.HTMextern "C"表示编译生成的内部符号名使用C约定。C++支持函数重载,而C不支持,两者的编译规则也不一样。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为:void foo( int x, int y ); 该函数被C编译器编译后在符号库中的名字可能为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangled name”)。_foo_int_i 阅读全文
posted @ 2014-01-03 09:39 酒鬼z 阅读(164) 评论(0) 推荐(0)

摘要:转自:http://blog.csdn.net/windtalkersm/article/details/5620551CL.exe 的命令行编译断断续续接触了几次,每次都忘,每次都重新查。每次都搞不清楚语法,尤其是传给linker的参数。因为网上所有的文章都是一样的,都是详细 的参数列表,都是没有实例。为了和大众保持一致,我在下面也copy一个详细的参数列表---只是在前面加几个实例cl.exe test.cpp /EHsc /I"C:/OpenCV2.0/include/opencv/" cv200.lib highgui200.libcxcore200.lib/lin 阅读全文
posted @ 2013-12-12 09:22 酒鬼z 阅读(517) 评论(0) 推荐(1)

摘要:转自:http://blog.csdn.net/zerolxl/article/details/80018141.怎么查看宏展开 从一个宏定义开始说起#define Mul( a,b) a * b 乍看之下这个宏定义并没有什么问题,但是当你采用如下用法的时候就会出现问题了[cpp] view plaincopyprint?intmain(char*argv[],intargc){intnmul=Mul(2+3,4+5);printf("mul=[%d]\n",nmul);return0;}运行后输出: 可以看到结果并不是我们预期的 5*9 =45, 这个时候我们可能就会想到 阅读全文
posted @ 2013-11-25 09:45 酒鬼z 阅读(581) 评论(0) 推荐(0)

摘要:转自:http://www.cnblogs.com/whiteyun/archive/2011/07/07/2099918.html符合ANSI的预定义宏:__DATE__:表示当前源文件编译时的日期,格式为:月/天/年(Mmm dd yyyy)。__FILE__:表示当前正在处理的源文件名称。__LINE__:表示当前正在处理的源文件的行,可以用#line指令修改。__STDC__:表示是ANSI C标准。只有在编译器选项指定了/Za,并且不是编译C++程序时,被定义为常整数1;否则未定义。__TIME__:表示当前源文件的最近编译时的时间,格式为:小时/分/秒(hh:mm:ss)。__TI 阅读全文
posted @ 2013-11-04 19:19 酒鬼z 阅读(221) 评论(0) 推荐(0)

摘要:在开发过程中,有很多阶段,每个阶段可能会注重不同的重点,我们可能会在不同阶段让程序输出或者打印不同的信息以反应运行的情况,所以我们必须分阶段的使得程序输出我们在每个阶段所要关心的信息,甚至在最后让程序不再输出信息。这就要用到了宏定义! 我们知道,在linux下很方便的就能实现可变参数宏的定义,比如:#define myprint(fmt, a...) printf("%s,%s(),%d:" fmt "/n", __FILE__,__FUNCTION__,__LINE__, ##a)就定义了自己的输出宏,当不必再输出这些可能是调式,跟踪,断言,日志... 阅读全文
posted @ 2013-09-24 09:03 酒鬼z 阅读(872) 评论(0) 推荐(0)

摘要:我们在C语言编程中会遇到一些参数个数可变的函数,例如printf()这个函数,这里将介绍可变函数的写法以及原理.* 1. 可变参数的宏一般在调试打印Debug 信息的时候, 需要可变参数的宏. 从C99开始可以使编译器标准支持可变参数宏(variadic macros), 另外GCC 也支持可变参数宏, 但是两种在细节上可能存在区别.1. __VA_ARGS____VA_ARGS__ 将"..." 传递给宏.如#define debug(format, ...) fprintf(stderr, fmt, __VA_ARGS__)在GCC中也支持这类表示, 但是在G++ 中不 阅读全文
posted @ 2013-09-24 09:02 酒鬼z 阅读(355) 评论(0) 推荐(0)

摘要:标准C和C++将编译过程定义为9个阶段(Phases of Translation):1.字符映射(Character Mapping) 文件中的物理源字符被映射到源字符集中,其中包括三字符运算符的替换、控制字符(行尾的回车换行)的替换。许多非美式键盘不支持基本源字符集中的一些字符,文件中可用三字符来代替这些基本源字符,以??为前导。但如果所用键盘是美式键盘,有些编译器可能不对三字符进行查找和替换,需要增加-trigraphs编译参数。在C++程序中,任何不在基本源字符集中的字符都被它的通用字符名替换。2.行合并(Line Splicing) 以反斜杠\结束的行和它接下来的行合并。3.标记化( 阅读全文
posted @ 2013-09-09 09:09 酒鬼z 阅读(644) 评论(0) 推荐(0)

摘要:网上江湖郎中和蒙古大夫很多,因此,此类帖子也很多。关于排序,我还真没研究过,看了江湖郎中和蒙古大夫的帖子,搞了半天不行,所以,自己研究了一 下,如下:三种方式都可以,如重写index,t2->index);returnt1->indexindex;}booloperatorindex,t2->index);returnt1->indexindex;}intmain(intargc,char**argv){listtiList1;listtiList2;vectortiVec1;vectortiVec2;TestIndex*t1=newTestIndex(2);TestI 阅读全文
posted @ 2013-07-29 13:52 酒鬼z 阅读(361) 评论(0) 推荐(0)

摘要:许多Visual C++的使用者都碰到过LNK2005:symbol already defined和LNK1169:one or more multiply defined symbols found这样的链接错误,而且通常是在使用第三方库时遇到的。对于这个问题,有的朋友可能不知其然,而有的朋友可能知其然却不知其所以然,那么本文就试 图为大家彻底解开关于它的种种疑惑。 大家都知道,从C/C++源程序到可执行文件要经历两个阶段:(1)编译器将源文件编译成汇编代码,然后由汇编器(assembler)翻译成机器指令 (再加上其它相关信息)后输出到一个个目标文件(object file,VC的编译. 阅读全文
posted @ 2013-07-17 09:50 酒鬼z 阅读(211) 评论(0) 推荐(0)

摘要:基础类1、Dinkumware C++Library参考站点:http://www.dinkumware.comP.J.Plauger编写的高品质的标准库。P.J.Plauger博士是Dr.Dobb's程序设计杰出奖的获得者。其编写的库长期被Microsoft采用,并且最近Borland也取得了其OEM的license,在其C/C++的产品中采用Dinkumware的库。2、RogueWaveStandard C++ Library参考站点:http://www.roguewave.com这个库在BorlandC++ Builder的早期版本中曾经被采用,后来被其他的库给替换了。笔者不 阅读全文
posted @ 2013-07-12 10:00 酒鬼z 阅读(910) 评论(0) 推荐(0)

摘要:typeid表达式形如: typeid(expr);这里expr是任意表达式或者类型名。如果表达式的类型是类类型且至少包含有一个虚函数,则typeid操作符返回表达式的动态类型,需要在运行时计算;否则,typeid操作符返回表达式的静态类型,在编译时就可以计算。typeid操作符的返回结果是名为type_info的标准库类型的对象的引用(在头文件typeinfo中定义)。标准并没有确切定义type_info,它的确切定义编译器相关的,但是标准却规定了其实现必需提供如下四种操作:t1 == t2如果两个对象t1和t2类型相同,则返回true;否则返回falset1 != t2如果两个对象t1和. 阅读全文
posted @ 2013-07-05 13:57 酒鬼z 阅读(517) 评论(0) 推荐(0)

摘要:IBM的C++指南里倒是明确告诉了我们reinterpret_cast可以,或者说应该在什么地方用来作为转换运算符:从指针类型到一个足够大的整数类型从整数类型或者枚举类型到指针类型从一个指向函数的指针到另一个不同类型的指向函数的指针从一个指向对象的指针到另一个不同类型的指向对象的指针从一个指向类函数成员的指针到另一个指向不同类型的函数成员的指针从一个指向类数据成员的指针到另一个指向不同类型的数据成员的指针reinterpret_cast用在任意指针(或引用)类型之间的转换;以及指针与足够大的整数类型之间的转换;从整数类型(包括枚举类型)到指针类型,无视大小。(所谓"足够大的整数类型& 阅读全文
posted @ 2013-06-22 19:30 酒鬼z 阅读(692) 评论(0) 推荐(0)

摘要:const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。 事实上这个概念谁都有,只是三种声明方式非常相似很容易记混。 Bjarne在他的The C++ Programming Language里面给出过一个助记的方法: 把一个声明从右向左读。 char * const cp; ( * 读成 pointer to ) cp is a const pointer to char const char * p; p is a pointer to const char; char const * p; 同上因为C++里面没有const*的 阅读全文
posted @ 2013-06-21 21:19 酒鬼z 阅读(137) 评论(0) 推荐(0)

摘要:优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右()圆括号(表达式)/函数名(形参表).成员选择(对象)对象.成员名->成员选择(指针)对象指针->成员名2-负号运算符-表达式右到左单目运算符(类型)强制类型转换(数据类型)表达式++自增运算符++变量名/变量名++单目运算符--自减运算符--变量名/变量名--单目运算符*取值运算符*指针变量单目运算符&取地址运算符&变量名单目运算符!逻辑非运算符!表达式单目运算符~按位取反运算符~表达式单目运算符sizeof长度运算符sizeof(表达式)3/除表达式/表达式左到右双目运算符*乘表 阅读全文
posted @ 2013-06-19 13:06 酒鬼z 阅读(429) 评论(0) 推荐(0)

摘要:GetLastError()返回值列表 分类: Delphi 2011-03-31 21:56 821人阅读 评论(0) 收藏 举报服务器网络数据库windows工作磁盘GetLastError()返回值列表:〖0〗-操作成功完成。〖1〗-功能错误。〖2〗-系统找不到指定的文件。〖3〗-系统找不到指定的路径。〖4〗-系统无法打开文件。〖5〗-拒绝访问。〖6〗-句柄无效。〖7〗-存储控制块被损坏。〖8〗-存储空间不足,无法处理此命令。〖9〗-存储控制块地址无效。〖10〗-环境错误。〖11〗-试图加载格式错误的程序。〖12〗-访问码无效。〖13〗-数据无效。〖14〗-存储器不足,无法完成此操... 阅读全文
posted @ 2013-06-17 09:01 酒鬼z 阅读(149) 评论(0) 推荐(0)

摘要:前言: 在16位环境下,int/unsigned int 占16位,long/unsigned long占32位 在32位环境下,int占32位,unsigned int占16位,long/unsigned long占32位何时需要使用: long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647,而unsigned范围是[0,2^32),即0~4294967295,所以常规的32位整数只能够处理40亿左右,当遇到比40亿大的多的数就要用到64位。64位使用范围: 不同的编译器对64位整数的扩展有所不同,VC使用__int64/unsigned... 阅读全文
posted @ 2013-05-18 22:49 酒鬼z 阅读(270) 评论(0) 推荐(0)

摘要://为了和DSP兼容,TSint64和TUint64设置成TSint40和TUint40一样的数//结果VC中还是认为是32位的,显然不合适//typedefsignedlongintTSint64;//typedefunsignedlongintTUint64;//ANSIC中规定longlong才能表示64位//参见:http://msdn.microsoft.com/en-us/library/s3f49ktz.aspx//可惜VC++6.0不认识longlong,会报errorC2632:'long'followedby'long'isillegalty 阅读全文
posted @ 2013-05-18 22:45 酒鬼z 阅读(171) 评论(0) 推荐(0)

摘要:在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情况,因此无论如何都能表示256个数字。在实际使用过程种有什么区别呢?主要是符号位,但是在普通的赋值,读写文件和网络字节流都没什么区别,反正就是一个字节,不管最高位是什么,最终的读取结果都一样,只是你怎么理解最高 阅读全文
posted @ 2013-05-18 22:40 酒鬼z 阅读(129) 评论(0) 推荐(0)

摘要:UNICODE:它是用两个字节表示一个字符的方法。比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是两个字符,高字符用0填充,而且汉字'程'在ASCII下面是两个字节,而在UNICODE下仍旧是两个字节。UNICODE的用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义。 MBCS,它是多字节字符集,它是不定长表示世界文字的编码。MBCS表示英文字母时就和ASCII一样(这也是我们容易把MBCS和ASCII搞混的原因),但表示其他文字时就需要用多字节。WINDOWS下面的程序设计可以支持MBCS和U 阅读全文
posted @ 2013-05-18 22:39 酒鬼z 阅读(163) 评论(0) 推荐(0)