Можно ли зашифровать макрос C, который содержит запятую?
Скажи, что у меня есть это:
#define CAKE , something
и результат, который я хочу, ", something"
, Это можно сделать?
Следующее не работает в gcc:
#define MAKE_STRING(x) #x
#define STRING(x) MAKE_STRING(x)
STRING(CAKE)
Компилятор считает, что я передаю два аргумента в MAKE_STRING() и balks.
2 ответа
Решение
Если ваш препроцессор поддерживает переменные макросы, __VA_ARGS__
сделает свое дело:
#define CAKE , something
#define MAKE_STRING(...) #__VA_ARGS__
#define STRING(x) MAKE_STRING(x)
#include <stdio.h>
int main()
{
printf("%s\n", STRING(CAKE) );
}