Вы можете использовать оператор вставки токена ##
:
#define diagnostic_arg(message,...) fprintf(stderr,L##message,__VA_ARGS__)
Однако, может быть, лучше использовать макрос TEXT
(если вы находитесь в Visual Studio), который будет правильно делать, независимо от того, определен UNICODE
или нет:
#define diagnostic_arg(message,...) fprintf(stderr,TEXT(message),__VA_ARGS__)
Если нет, TEXT
можно определить так:
#ifdef UNICODE
#define TEXT(str) L##str
#else
#define TEXT(str) str
#endif
Однако , если вы планируете использовать другие #define
s в качестве первого аргумента этого макроса (и действительно, даже если вы не планируете его), вам понадобится еще один уровень косвенности в макрос, поэтому определение будет оцениваться вместо вставки вместе с L
как текст. См. Ответ Mooing Duck, чтобы узнать, как это сделать. На самом деле это правильный способ сделать это, но я не удаляю этот ответ, потому что хочу сохранить 80 повторений.