通常在使用包含警卫时我会这样写:
#ifndef FILENAME_H
#define FILENAME_H
...
#endif // FILENAME_H
现在在一些图书馆里,我见过类似的东西:
#ifndef FILENAME_H
#define FILENAME_H 1
...
#endif // FILENAME_H
经过一些研究后,我没有找到任何理由说明为什么需要初始化包含gurad。
有没有理由这样做?
答案 0 :(得分:1)
虽然我从未见过这样的编译器,但我被告知“空”定义可能被视为未定义。 我对哪个编译器的行为非常感兴趣。
即使C89也声明: 3.8.1有条件的包含 约束
控制条件包含的表达式应为
形式的整数常量表达式[...]已定义的标识符
已定义(标识符)
如果标识符当前被定义为宏名称(即,如果它是预定义的,或者它是#define预处理指令的主题,而没有介入的具有相同主题标识符的#undef指令),则计算结果为1 ,如果不是,则为0。