C语言:递归#include

时间:2011-07-15 18:15:49

标签: c programming-languages

我遇到了这样一段代码:

A.H:

#include "b.h"
/* structure definitions, macros etc. */

b.h:

    #include "a.h"
/* structure definitions, macros etc. */

这是否符合C标准的观点?我认为这种做法并不安全。

4 个答案:

答案 0 :(得分:6)

您需要使用include guards。那就安全了。

a.h
#ifndef A_H
#define A_H
/* ... */

#endif

答案 1 :(得分:4)

这是合法的。我所知道的所有编译器都有一个嵌套限制,通常在20到50的范围内。如果有用,递归很容易用condtionals控制:

#if NESTING < 5
 #define NESTING NESTING+1
 #include "myself.h"
#endif

作为一名程序员,有成千上万的方法可以射击自己。这只是一种方式。小心。

答案 2 :(得分:2)

这就是include guards派上用场的地方。

答案 3 :(得分:1)

这是合法的。但它不能保证会产生任何有用的东西。使用前向声明并包含警卫来摆脱这种循环依赖。