Препроцессор не может использовать переменные из программы на языке C в выражениях - он может работать только с макросами препроцессора.Поэтому, когда вы пытаетесь использовать c
в препроцессоре, вы не получаете того, что ожидаете.
Однако вы также не получаете ошибку, потому что, когда препроцессор пытается оценить идентификатор, который не 'Определяемый как макрос, он обрабатывает идентификатор как значение, равное нулю.
Поэтому, когда вы нажимаете этот фрагмент:
#if c==1
#define check(a) (a==1)?a:5
#define TABLE_SIZE 100
#endif
c
, используемый препроцессором, не имеет ничего общего сделать с переменной c
из программы C.Препроцессор проверяет наличие макроса, определенного для c
.Поскольку его нет, он вычисляет следующее выражение:
#if 0==1
, что, конечно, неверно.
Поскольку вы, кажется, не используете переменную c
в своей программе,Вы можете сделать следующее, чтобы привести поведение в соответствие с тем, что вы пытаетесь:
#define C 1
#if C==1
#define check(a) (a==1)?a:5
#define TABLE_SIZE 100
#endif
(Обратите внимание, что я также сделал имя макроса в верхнем регистре в соответствии с соглашением для имен макросов.)