不包括 #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 预处理指令重新定义,前提是第二个定义是类对象的宏定义并且两个替换列表相同。[..]
开始在该标题中放入更复杂的内容,您将看到问题。