C包括守卫

C include guard

本文关键字:守卫 包括      更新时间:2023-10-16

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

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

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

Yes and No。这取决于.

  • 如果file2.c包含一些包含inc.h的头,那么yesINC_H已经为file2.c定义了。对于任何级别的包含都是如此。

  • Else, no未定义

保护防止头文件被间接或直接地包含在文件中不止一次!

当您编译file2.c时,编译器将重新启动。编译file1.c时定义的预处理器符号在编译file2.c时不起作用

定义不会在*.c文件之间传播。如果它们是,那么您首先就不需要*.h文件。(然而,您可以#include *.c文件,但那是另一回事。)

不,想一下" #include "是做什么的。它实际上是将头文件的内容复制到包含它的地方。

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

当包含文件中包含其他内容时,

包含保护非常有用。在这些情况下,您可以使用警卫来避免麻烦。