没有多重包含保护,没有编译错误

时间:2019-08-12 00:54:34

标签: gcc

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

// main.c

#include <stdio.h>

#include "declare.h"
#include "declare.h" //Shouldn't I get compiler error here

int main(){

  printf("Hello World\n");

}
// declare.h

#define a 1 //just this define in declare.h file

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

1 个答案:

答案 0 :(得分:0)

无论有没有保护措施,多次包含标头都不是错误。

在执行此操作时,警卫会阻止您重新定义对象和功能。

但是您还没有这样做。您刚刚使用与以前相同的值重新定义了一个宏。很好。

您可以通过编译以下文件来进行测试:

#define a 1
#define a 1

很好。


  

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


开始在标题中放入更复杂的内容,您会发现一个问题。