没有多重包含保护,则不会发生编译错误

  • 本文关键字:错误 编译 包含 保护 gcc
  • 更新时间 :
  • 英文 :


不包括 #ifndef 保护以防止包含多个头文件,不会引发编译错误。为什么?

// main.c
#include <stdio.h>
#include "declare.h"
#include "declare.h" //Shouldn't I get compiler error here
int main(){
printf("Hello Worldn");
}
// declare.h
#define a 1 //just this define in declare.h file

用于编译的命令:gcc main.c -std=c89

多次包含标头都不是错误,无论有没有防护装置。

当您这样做时,防护会阻止您重新定义对象和函数。

但你还没有这样做。您刚刚重新定义了一个宏,其值与之前相同。这很好。

您可以通过编译以下文件来测试这一点:

#define a 1
#define a 1

没事的。


[C89: 6.8.3]:[..]当前定义为不使用 lparen 的宏(类对象宏(的标识符可以通过另一个 #define 预处理指令重新定义,前提是第二个定义是类对象的宏定义并且两个替换列表相同。[..]


开始在该标题中放入更复杂的内容,您将看到问题。

相关内容

最新更新