C包括警卫

时间:2011-11-25 11:48:52

标签: c++ c include-guards

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

5 个答案:

答案 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文件没有任何改变。

当包含文件中包含其他包含时,包含保护非常有用。在这些情况下,您可以避免使用警卫的麻烦。