CrashRpt:使用#将宏多字节字符串转换为UnicodeCrashRpt(崩溃报告库)中一个有趣的用法是:#define WIDEN2(x) L ## x#define WIDEN(x) WIDEN2(x)//Note you need a WIDEN2 so that __DATE__ will evaluate first.在这里,他们想使用两个字节的字符串,而不是一个字节的每字符串。这看起来可能是毫无意义的,但他们这么做是有充分理由的。 std::wstring BuildDate = std::wstring(WIDEN(__DATE__)) + L" " + WIDEN(__TIME__);它们与返回日期和时间的字符串的另一个宏一起使用它。放L紧挨着__ DATE __会给你一个编译错误。Windows:对通用Unicode或多字节字符串使用#Windows使用如下所示:#ifdef _UNICODE #define _T(x) L ## x#else
#define _T(x) x#endif和_T在代码中到处使用。用于清洁访问器和修饰符名称的各种库:我还在代码中看到它用于定义访问器和修饰符:#define MYLIB_ACCESSOR(name) (Get##name)#define MYLIB_MODIFIER(name) (Set##name)同样,您也可以在任何其他类型的聪明的名称创建中使用相同的方法。各种库,使用它同时进行多个变量声明:#define CREATE_3_VARS(name) name##1, name##2, name##3int CREATE_3_VARS(myInts);myInts1 = 13;myInts2 = 19;myInts3 = 77;