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

18 篇文章 0 订阅

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值