Я обнаружил, что в MSVC и Clang существует различие в строковой макросов. Можно ли написать макрос строкового преобразования в Clang, который работает так же, как и строковый формат в MSVC?
#define __IN_QUOTES(str) #str
#define IN_QUOTES(str) __IN_QUOTES(str)
#define HELLO_WORLD Hello world
int main()
{
#ifdef _MSVC_LANG
printf("%s", "MSVC\r\n");
#else
printf("%s", "CLANG\r\n");
#endif
printf("%s", IN_QUOTES(HELLO_WORLD));
return 0;
}
Этот код работает одинаково как в Clang, так и в MSVC, но если я напишу строку 3 как
#define HELLO_WORLD Hello, world
он будет скомпилирован в MSVC (с «Hello, world») в выводе, но не скомпилирован в Clang с ошибкой «слишком много аргументов для вызова функции, подобного макросу».
Вопрос в том, можно ли написать макрос IN_QUOTES, который мог бы создавать «Hello, world» как в Clang, так и в MSVC?
Я пробовал
#define IN_QUOTES((str)) __IN_QUOTES(str)
Возвращает "(Hello, world)" в Clang и в MSVC, но для меня интересно получить его без скобок.