ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
21 апреля
1511871
il-2 (14.04.2025 12:23, просмотров: 4143)
Использование в заголовочных файлах Си заградительных макросов: 

А никто-никогда не задумывался об том, что возможно - он неправильно использует заградительные макросы в заголовочных файлах.

Типичный пример:

#ifndef _MYHEADER_H_
#define _MYHEADER_H_

#include "inc1.h"

#include "inc2.h"

...
#endif // _MYHEADER_H_

Когда АБСОЛЮТНО весь код заголовочника впихивается под заградительный макрос - можно поиметь неприятный сюрприз. У меня уже было несколько случаев в сложных по структуре проектах, когда в заголовочниках есть взаимно-используемые определения, и они "не находят" друг друга. Приходиться мучиться, и менять порядок директив #include в самих заголовочниках, а иногда - и в исходных файлах.

А ведь достаточно сделать просто - разместить #include за пределами заградительного макроса:

#include "inc1.h"

#include "inc2.h"


#ifndef _MYHEADER_H_

#define _MYHEADER_H_

...

#endif // _MYHEADER_H_


Может это - элементарная вещь, которую все кроме меня знают. Но я до сих пор пользовался вариантом 1. А похоже, что правильно пользоваться вариантом 2.

Пока сижу - ставлю мысленных эксперимент. Вроде все сходится.