Из-за двойного включения защиты инструмент, который вставляет #include, может вызвать гигантский файл, где многие заголовки полностью находятся внутри #ifndefs, которые не совпадают. В крайних случаях это может даже привести к выходному файлу бесконечного размера, если включения являются рекурсивными (что обычно не является проблемой из-за двойного включения защиты).
Я только что подтвердил, что этот код успешно компилируется:
main.cpp:
#include "a.h"
int main() { return 0; }
хиджра:
#ifndef A_H_INCLUDED
#define A_H_INCLUDED
#include "b.h"
#endif
b.h:
#ifndef B_H_INCLUDED
#define B_H_INCLUDED
#include "a.h"
#endif
Поскольку вы хотите, чтобы ifdefs не затрагивались и не разбирались, инструмент, который вставляет #includes
, будет вызывать бесконечный вывод.