C preprocessor Literal Construction

匿名 (未验证) 提交于 2019-12-03 01:54:01

问题:

My problem is as follows:

I have a string literal that is macro-ed like so

#define TITLE "Title" 

But there are instances when I need to pass in a wide char variant of this string. I want to be able to pass L"Title" to those functions. So naturally, I set out trying to define a new macro W_TITLE in terms of TITLE.

But I have no luck, all my approaches (listed bellow) have failed. Please tell me how such magic can be accomplished.

I tried

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

But they all fail...

回答1:

Try this:

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

You need to force an expansion through an intermediate macro to get what you're looking for.

#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; } 

Result:

Title Title 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!