C预处理器文字构造

我的问题如下:

我有一个像这样的宏编辑的字符串文字

#define TITLE "Title" 

但有些情况下,我需要传入此字符串的宽字符变体。 我希望能够将L"Title"传递给这些函数。 很自然地,我试图用TITLE来定义一个新的宏W_TITLE

但是我没有运气,我所有的方法(下面列出的)都失败了。 请告诉我如何完成这样的魔术。

我试过了

 #define W_TITLE L##TITLE #define W_TITLE #L TITLE #define W_TITLE ##L TITLE 

但他们都失败了……

试试这个:

 #define WIDEN_(exp) L##exp #define WIDEN(exp) WIDEN_(exp) #define TITLE "Title" #define W_TITLE WIDEN(TITLE) 

您需要通过中间宏强制扩展以获得您正在寻找的内容。

 #include  #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