c/c++ 字符串 ## 和 #

来源:互联网 发布:unblockcn mac 编辑:程序博客网 时间:2024/05/18 02:52

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));


0 0