В c у меня есть следующее в существующей базе кода:
#define MYVAR (1)
Как вы можете видеть, это соответствует хорошей практике в C, заключая #define в круглые скобки (хотя я знаю, что в этом случае это не имеет значения, поскольку значение не является выражением). Независимо от того, я хотел бы использовать это в stringification. когда я делаю это:
#define STRINGIFY(x) #x
#define TO_STRING(x) STRINGIFY(x)
const char* mystring = TO_STRING(MYVAR) ;
Результирующая строка — «(1)». Я хотел бы убрать круглые скобки без простых действий:
#define MYVAR 1
Есть ли способ устранить круглые скобки во время стробирования в c?
MYVAR
как замененные на(1)
, я не верю, что то, что вы ищете, выполнимо. Если это так, я не могу себе представить, чтобы это было так, не будучи очень специфичным для cpp-backend. - person WhozCraig   schedule 26.08.2013#define MUL(x,y) ((x)*(y))
и просто#define MUL(x,y) x*y
. Что происходит, когда это расширяется с помощьюMUL(a+1,b+2)
? Последний становитсяa+1*b+2
, что, конечно, не всегда((a+1)*(b+2))
. Скобки нужны просто для того, чтобы подавить такое непреднамеренное расширение, чтобы изолировать предполагаемую оценку параметра, если хотите. - person WhozCraig   schedule 26.08.2013