Я сталкивался с таким фрагментом кода:
ах:
#include "b.h" /* structure definitions, macros etc. */
bh:
#include "a.h" /* structure definitions, macros etc. */
Является ли это законным с точки зрения стандарта C?Я думаю, такой подход небезопасен.
Вам необходимо использовать включая охрану .Тогда это будет безопасно.
a.h #ifndef A_H #define A_H /* ... */ #endif
Это законно.Все известные мне компиляторы устанавливают предел вложенности, обычно в диапазоне от 20 до 50. Рекурсию, если она полезна, легко контролировать с помощью условных выражений:
#if NESTING < 5 #define NESTING NESTING+1 #include "myself.h" #endif
Существуют тысячи способов застрелитьсянога как программист.Это всего лишь еще один способ.Будьте осторожны.
Вот где include guards пригодятся.
include guards
Это законно. Но это не обязательно приведет к чему-либо полезному. Используйте предварительные объявления и включайте охрану, чтобы избавиться от таких циклических зависимостей.