不包括#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
答案 0 :(得分:0)
无论有没有保护措施,多次包含标头都不是错误。
在执行此操作时,警卫会阻止您重新定义对象和功能。
但是您还没有这样做。您刚刚使用与以前相同的值重新定义了一个宏。很好。
您可以通过编译以下文件来进行测试:
#define a 1
#define a 1
很好。
[C89: 6.8.3]:
[..] 当前定义为不使用lparen(类似于对象的宏)的宏的标识符可以由另一个#define预处理指令重新定义,前提是第二个definition是类似于对象的宏定义,并且两个替换列表相同。 [..]
开始在标题中放入更复杂的内容,您会发现一个问题。