1、目前大部分使用的是unicode(win9x只支持ansi),它们之间的转换使用的也比较多;
windows编译器可以使用 L 、_T()、 TEXT()来转换;其中L"xxx"表示使用unicode编译,而_T()、 TEXT()者不管使用ansi还是unicode都是可以编译的;
跟踪后面两者如果是unicode环境最终都是用L来替换的。eg: _T(quote) L##quote
2、由于挺久没有使用##和#了,又忘了差不多了。##是字符串连接符,#的用法是在宏定义中表示后面跟的是字符串
eg1: #define FUN(A, B) (A##B) ,如果传入FUN("123", "345")最终得到“123456”;
eg2: #define FUNC(A, B) (A#B) , 如果传入FUNC("123", 456)最终结果还是“123456”;
但是有个疑问是eg2中define只做了宏展开,所以很自然的把“123”#456;当成一个有效的语句去编译 结果可想而知不行,所以这个中间编译器针对#做了什么?
好奇心的驱使下就就把它预编译文件调出来了看了下,发现是FUNC("123", 456) ;在编译文件中被替换成了"123""456";
3、编译器是默认不会生成对应的预编译文件(.i/.ii(linux c++));
vs2008设置生产预编译文件步骤:
步骤1、项目----配置属性----c/c++----预处理器----将 否 改为 (带行号/(P));
步骤2、项目----配置属性----c/c++----保留注释----将 否 改为 (是/(C));