我C++确实不怎么样,不过近来不得不再唤醒那远古的记忆……即使光看代码也得要C++。
好吧,于是我需要wide版的__DATE__和__TIME__之类。但是那俩宏都是char*而不是wchar_t*的,咋办?
用L来转换?
直接转的话,不行。L__DATE__本身是一个有效的id,但却没这东西存在。
用一个宏:
也不行,原因同上。
偏偏这样就可以:
Why???
我得去复习宏展开的规则了……
========================================================
另外一个值得注意的问题。Visual C++的编译器中,宏展开的优先级比string concatenation高,而GCC/BCB等编译器则相反。所以下面的代码在VC里用不了:
而得写成:
好吧,于是我需要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__)
本文探讨了在C++中如何正确使用宏定义来处理宽字符(__DATE__和__TIME__),并解释了不同编译器下宏展开的规则差异。
1180

被折叠的 条评论
为什么被折叠?



