C语言:递归#include

Mar*_*ark 1 c programming-languages

我遇到了这样一段代码:

啊:

#include "b.h"
/* structure definitions, macros etc. */
Run Code Online (Sandbox Code Playgroud)

BH:

    #include "a.h"
/* structure definitions, macros etc. */
Run Code Online (Sandbox Code Playgroud)

从C标准来看这是合法的吗?我认为这种方法并不安全.

wal*_*lyk 6

这是合法的。据我所知,所有编译器都施加了嵌套限制,通常在 20 到 50 的范围内。递归(如果有用)可以通过条件轻松控制:

#if NESTING < 5
 #define NESTING NESTING+1
 #include "myself.h"
#endif
Run Code Online (Sandbox Code Playgroud)

作为一名程序员,有成千上万种搬起石头砸自己脚的方法。这只是又一种方式。当心。


cni*_*tar 6

你需要使用包含警卫.那就安全了.

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

#endif
Run Code Online (Sandbox Code Playgroud)