Вы не можете проверить значение переменных времени выполнения через условные выражения препроцессора. Они могут проверять только значения символов уровня препроцессора. Например,
#define A 5
#if (A > 3)
...
#endif
Глядя на то, как вы использовали #define
и #if
, , мое предположение заключается в том, что вы имели в виду определение какой-то функции уровня препроцессора имея #define
аналогичную роль def func ():
в Python. Это не так.
#define A expr
просто заменяет символ A
на выражение expr
в текущем исходном файле до компиляции. Нет вхождений A
, никаких подстановок #define A(b,c) expr
аналогично предыдущему, но использует b,c
подобные параметры функции, и они заменяются в заменяемых в выражение expr
с использованием значений, переданных при вызове макроса. #if expr
или #ifdef symbol
или #ifndef symbol
- это способы проверки значения или даже простого определения символов, ранее определенного через #define
s (или через опцию компилятора -D), чтобы выполнить условную компиляцию целых разделов кода. Эти разделы закрываются с помощью #endif
, а альтернативные разделы в случае ложных условий могут быть скомпилированы с использованием директив #else
и #elif
.
Что вы можете сделать, и я подозреваю, что это была ваша настоящая цель, это определить макрос, который найдет максимальное значение среди его параметров:
#define MAX(a,b,c) \
(((a>b) && (a>c))? a : ((b>a) && (b>c))? b : c ))
Я использовал троичный оператор для вычисления максимального значения.
Примечание: символ \
позволяет размещать макрос на нескольких строках. Это должен быть последний символ строки.