我的问题如下:
我有一个像这样的宏编辑的字符串文字
#define TITLE "Title"
但是有些情况下我需要传入此字符串的宽字符变体。我希望能够将L"Title"
传递给这些函数。很自然地,我开始尝试用W_TITLE
来定义新的宏TITLE
。
但是我没有运气,我所有的方法(下面列出的)都失败了。请告诉我如何完成这样的魔术。
我试过
#define W_TITLE L##TITLE
#define W_TITLE #L TITLE
#define W_TITLE ##L TITLE
但他们都失败了......
答案 0 :(得分:11)
试试这个:
#define WIDEN_(exp) L##exp
#define WIDEN(exp) WIDEN_(exp)
#define TITLE "Title"
#define W_TITLE WIDEN(TITLE)
您需要通过中间宏强制扩展以获得您正在寻找的内容。
#include <stdio.h>
#define WIDEN_(exp) L##exp
#define WIDEN(exp) WIDEN_(exp)
#define TITLE "Title"
#define W_TITLE WIDEN(TITLE)
int main(int argc, char *argv[])
{
printf("%s\n", TITLE);
wprintf(L"%ls\n", W_TITLE);
return 0;
}
结果:
Title
Title