Просто используйте #if xxx
. Undefined xxx
обрабатывается препроцессором как ноль.
#include <stdio.h>
#if MACRO_TEST
char msg[] = "MACRO_TEST is defined";
#else
char msg[] = "MACRO_TEST is NOT-defined";
#endif
int main ()
{
printf("msg = %s\n", msg);
return 0;
}
И вам не нужно указывать значение в командной строке, достаточно просто -Dxxx
, и компилятор / препроцессор примет 1
:
cc -Wall -DMACRO_TEST defined.c
UPDATE. Все четыре случая:
#include <stdio.h>
#if MACRO_TEST
char msg[] = "MACRO_TEST is defined and non-zero";
#else
char msg[] = "MACRO_TEST is NOT-defined or zero";
#endif
int main (int argc, char**argv)
{
printf("%s: msg = %s\n", argv[0], msg);
return 0;
}
#!bin/sh
cc -Wall defined.c -o x
cc -Wall -DMACRO_TEST defined.c -o xd
cc -Wall -DMACRO_TEST=0 defined.c -o xd0
cc -Wall -DMACRO_TEST=1 defined.c -o xd1
./x
./xd
./xd0
./xd1
rm x xd xd0 xd1
результат:
./x: msg = MACRO_TEST is NOT-defined or zero
./xd: msg = MACRO_TEST is defined and non-zero
./xd0: msg = MACRO_TEST is NOT-defined or zero
./xd1: msg = MACRO_TEST is defined and non-zero