宏定义的妙用

来源:互联网 发布:picasa3官方下载mac 编辑:程序博客网 时间:2024/05/17 01:46
  刚下班的时候在写一个小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位(宽字符)       。呵呵呵---发现自己想到了和系统一样的东西了,还是要记录下,不为别的,只鼓励下自己的思考。

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

原创粉丝点击