Макросов работать во время компиляции, а не во время выполнения. Они могут выполнять различные трюки с текстом, но они не оценивают что угодно. (Они могут, конечно, развернуть до код, который что-то оценивает.) Ввод форматированного значения переменной i
в строку включает оценку i
; макрос не может это сделать.
Вы могли бы вместо того, чтобы расширить сферу макро включить весь printf()
вызов:
#define PRINT_ESP(n1, i) do { \
printf(((i > 0) ? "%+d^%d" : "%+d"), n1, i); \
} while (0)
В качестве альтернативы, вы можете использовать макрос, чтобы выразить только выбор формата включен в указанное выше макроопределение, или вы могли бы просто поместите полный вызов printf()
прямо в свой код.
Все эти варианты основаны на том факте, что аргументы, превышающие требуемые данным форматом, оцениваются до вызова, но игнорируются самим printf()
.
wt является ошибкой? – ANjaNA