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