3

当第一次file1.c包含inc.h(包含包含保护#ifndef INC_H)时,#define INC_H执行。但是现在,当另一个file2.c包含相同inc.h的宏时,是否INC_H已经定义了宏,这都是同一个故事,以前的定义没有在这里传播?

4

5 回答 5

4

在单独的编译之间不保留宏定义。

于 2011-11-25T11:53:28.573 回答
2

但是现在,当另一个 file2.c 包含相同的 inc.h 时,是否已经定义了宏 INC_H,

是和否。这取决于。

  • 如果file2.c包含一些包含 的标头inc.h,那么的,INC_H已经为 定义了file2.c。这适用于任何级别的包容性。

  • 否则,,它尚未定义。

守卫不止一次地间接或直接地防止文件头包含在文件中!

于 2011-11-25T11:52:45.387 回答
2

当您 compilefile2.c时,编译器会重新启动。file1.c编译时定义的任何预处理器符号在file2.c.

于 2011-11-25T11:54:41.047 回答
0

定义不会在*.c文件之间传播。如果是的话,你一开始就不需要*.h文件。(但是,您可以#include使用*.c文件,但那是另一回事了。)

于 2011-11-25T11:53:27.190 回答
0

不,想一想“ #include”是做什么的。它本质上是将头文件的内容复制到包含它的位置。

所以INC_H将定义第一次inc.h包含在一个.c文件中。但是,这对另一个 .c 文件没有任何改变。

当包含文件中包含其他包含时,包含保护很有用。在这些情况下,您可以避免使用防护装置的麻烦。

于 2011-11-25T11:53:36.800 回答