我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__)