宏定义的妙用

  刚下班的时候在写一个小DEMO,主要是能让程序能在ANSI和UNICODE都能正常编译运行的,对于程序的所有的字串我有这样的定义:

 #ifdef _UNICODE
typedef  std::wstring String;
#else
typedef  std::string String;
#endif

这样在程序中能随便使用String这个东西,后来在写一个函数的时候发现了一个问题,对于默认字串参数的函数时一般写成 const String & s = "" 后来编译遇到了问题,就是说类型赋值的问题,因为""不能自动转换为UNICODE,就算对String的操作也是不能自动转换的,后来找了找使用宏是一个比较方便的处理方式,具体宏为:

#ifdef _UNICODE
typedef  std::wstring String;
#define  S(A)   L##A
#else
typedef  std::string String;
#define  S(A)           A
#endif

这样对于那样的默认参数就写成了const String & s =S( ""),这个真是好用啊,后来又查查资料,发现我一下没想起来的系统宏定义 _T与_TEXT  记得以前也用过,_T/_TEXT的宏定义就是L##(字符串) ,L表示长型,及定义的字符串中每个字符为16位(宽字符)       。呵呵呵---发现自己想到了和系统一样的东西了,还是要记录下,不为别的,只鼓励下自己的思考。

       其实宏在使用的时候也有很多不好的地方,我相信做程序的都知道,对于宏展开和无类型约束的缺点还是要警惕!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值