Несколько операторов #ifndef - какой из них применяется
Скажем, у меня есть пять файлов: main.c, sample1.c, sample1.h, sample2.c
а также sample2.h
где в каждом из этих файлов DEBUG_PRINTS
определяется следующим образом:
#ifndef DEBUG_PRINTS
#define DEBUG_PRINTS 0
#endif
и код скомпилирован с использованием gcc:
gcc -Wall main.c sample1.c sample2.c -o main
Теперь я меняю значение DEBUG_PRINTS
в одном файле 1
, Без печати в терминал, как вы можете определить, какое значение будет применяться?
Кроме того, как я могу определить DEBUG_PRINTS
локально для файла - так же, как использование static
ключевое слово для переменных?
2 ответа
Каждый файл составляется отдельно. Макросы из одного файла не видны ни в одном другом файле. Как только файлы скомпилированы независимо, результирующие объекты связываются вместе, чтобы создать исполняемый файл.
#ifndef
означает, что макрос не определен в этом файле ранее или в заголовке, который вы включили. В вашем случае по умолчанию это 0.
Если вы измените DEBUG_PRINTS
в этом одном файле 1
это переопределит #define
в #ifndef
найдено в заголовочном файле. Вы в основном локально определяете или переопределяете значение по умолчанию DEBUG_PRINTS
в импортированном заголовочном файле 1
,
В противном случае макросы видны только для этого файла или заголовка.