C препроцессор Literal Construction

Моя проблема заключается в следующем:

У меня есть строковый литерал, который называется макрорежимом

#define TITLE "Title" 

Но бывают случаи, когда мне нужно передать широкий вариант этой строки. Я хочу передать L"Title" этим функциям. Поэтому, естественно, я попытался определить новый макрос W_TITLE с точки зрения 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