第一次file1.c
包含inc.h
(包含包含警卫#ifndef INC_H
)时,会执行#define INC_H
。但是现在,当另一个file2.c
包含相同的inc.h
时,宏INC_H
是否已经定义,所有它都是相同的故事,之前的定义不会在这里传播?
答案 0 :(得分:4)
不同的编辑之间不保留宏定义。
答案 1 :(得分:2)
但是现在,当另一个file2.c包含相同的inc.h时,是否已经定义了宏INC_H,
是和否。这取决于。
如果file2.c
包含一些包含inc.h
的标题,则是,INC_H
已为file2.c
定义。对于任何级别的包含都是如此。
否则,否尚未定义。
Guards防止标题被间接或直接包含在文件中,不止一次!
答案 2 :(得分:2)
编译file2.c
时,编译器重新启动。无论在编译file1.c
时定义的预处理器符号是什么,在编译file2.c
时都不会发挥作用。
答案 3 :(得分:0)
定义不会在*.c
个文件之间传播。如果是,您首先不需要*.h
个文件。 (但是,您可以#include
*.c
个文件,但这是另一个故事。)
答案 4 :(得分:0)
不,请想一想“#include
”的作用。它实质上将头文件的内容复制到包含它的位置。
因此INC_H
将在inc.h
文件中首次包含.c
时定义。但是,这对另一个.c文件没有任何改变。
当包含文件中包含其他包含时,包含保护非常有用。在这些情况下,您可以避免使用警卫的麻烦。