奇怪的宏

我C++确实不怎么样,不过近来不得不再唤醒那远古的记忆……即使光看代码也得要C++。
好吧,于是我需要wide版的__DATE__和__TIME__之类。但是那俩宏都是char*而不是wchar_t*的,咋办?

用L来转换?

直接转的话,不行。L__DATE__本身是一个有效的id,但却没这东西存在。
用一个宏:
#define WIDEN(x) L##x

也不行,原因同上。

偏偏这样就可以:
#define WIDEN(x) L##x
#define WIDEN2(x) WIDEN(x)


Why???
我得去复习宏展开的规则了……

========================================================

另外一个值得注意的问题。Visual C++的编译器中,宏展开的优先级比string concatenation高,而GCC/BCB等编译器则相反。所以下面的代码在VC里用不了:
WIDEN2(__DATE__ " " __TIME__)

而得写成:
WIDEN2(__DATE__) WIDEN2(" ") WIDEN2(__TIME__)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值