Главная arrow Программирование arrow ARM arrow IAR EW ARM: применение #ifndef и #define для разрешения конфликтов включаемых файлов (#include) Sunday, October 22 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

IAR EW ARM: применение #ifndef и #define для разрешения конфликтов включаемых файлов (#include) Версия для печати
Написал microsin   
08.04.2009

В сложных проектах появляется очень много заголовочных файлов (хедеров - от слова 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 включается первый раз, и в этом случае его содержимое компилируется.

Последнее обновление ( 14.05.2011 )
 

Комментарии  

  1. #2 Ляляля
    2010-12-2323:06:44 Да у человека талант объяснять =)
    По красоте =)
  2. #1 lecovich
    2010-07-2210:09:52 Четко, кратко и понятно. Спасибо))

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2017