C预处理器文字构造

Sto*_*ica 14 c c-preprocessor

我的问题如下:

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

#define TITLE "Title"
Run Code Online (Sandbox Code Playgroud)

但有些情况下,我需要传入此字符串的宽字符变体.我希望能够传递L"Title"给那些功能.所以很自然,我开始试图定义一个新的宏W_TITLE来讲TITLE.

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

我试过了

#define W_TITLE L##TITLE
#define W_TITLE #L TITLE
#define W_TITLE ##L TITLE
Run Code Online (Sandbox Code Playgroud)

但他们都失败了......

Who*_*aig 11

试试这个:

#define WIDEN_(exp)   L##exp
#define WIDEN(exp)    WIDEN_(exp)
#define TITLE         "Title"
#define W_TITLE       WIDEN(TITLE)
Run Code Online (Sandbox Code Playgroud)

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

结果:

Title
Title
Run Code Online (Sandbox Code Playgroud)

  • @Mike lol.SRY.今天早上咖啡不够. (4认同)