Можно ли зашифровать макрос 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) );
}
#define CAKE     (, something)

пожалуйста, попробуйте.

Другие вопросы по тегам