IAR EW ARM: применение #ifndef и #define для разрешения конфликтов включаемых файлов (#include) |
![]() |
Добавил(а) microsin |
В сложных проектах появляется очень много заголовочных файлов (хедеров - от слова header, обычно файлы с расширением *.h), которые объявляют константы, макросы, подпрограммы и переменные. Обилие таких файлов может приводить к конфликтам из-за взаимного включения файлов друг в друга или дублирования включений. Забыть об этом раз и навсегда позволяет комбинация директив #ifndef и #define. Вот пример использования директив для файла vars.h: //[Заголовочный файл vars.h] #ifndef _VARS_ #define _VARS_ #include "include/settings.h" #include "include/pins.h" ... extern u32 debounceUSB; extern u8 needrefresh; extern tTime Time; extern char txtBuf [TXTBUF_SIZE]; ... #endif //_VARS_ Принцип простой - в начале хедера компилятор проверят наличие макроса _VARS_ (имя, которое стоит на месте _VARS_, может быть произвольным). Если _VARS_ уже определен, то все содержимое хедера до директивы #endif не просматривается компилятором, чем исключаются конфликты. Если же макроса _VARS_ пока нет, то это означает, что файл vars.h включается первый раз, и в этом случае его содержимое компилируется. |