Используйте вложенные директивы #include
Хотя большинство из правил в этой главе говорят вам, как избежать использования препроцессора, механизм включения файлов директивой #include
является обязательной функцией препроцессора как в Си, так и в Си++. Тем не менее, даже здесь существуют проблемы.
Это на самом деле плохая идея - требовать, чтобы кто-нибудь включал файл, способный включать в себя следующий. Я всегда располагаю директивы #include без определенного порядка или забываю вставить одну из них. Следовательно, заголовочный файл должен всегда включать те файлы, которые определяют то, что используется в текущем заголовочном файле. Вследствие того, что могут возникнуть проблемы, если компилятор прочитает какой-нибудь .h
файл более одного раза, вы должны предпринять шаги для предотвращения многократной обработки одного и того же файла. Помещайте строки типа:
#ifndef FILENAME_H_
#define FILENAME_H_
в начале каждого заголовочного файла, и вставляйте соответственно:
#endif // FILENAME_H_
в конце. Так как константа FILENAME_H_
будет уже определена к моменту второй попытки препроцессора обработать этот файл, то его содержание при втором проходе будет проигнорировано.