1

通常在使用包含守卫时,我会这样写:

#ifndef FILENAME_H
#define FILENAME_H

...

#endif // FILENAME_H

现在在一些图书馆中,我看到了类似的东西:

#ifndef FILENAME_H
#define FILENAME_H 1

...

#endif // FILENAME_H

经过一番研究,我没有找到任何理由说明为什么需要初始化 include-gurad。

这样做有什么理由吗?

4

1 回答 1

1

尽管我从未见过这样的编译器,但有人告诉我“空”定义可以被视为未定义。我对哪个编译器的行为如此感兴趣。

甚至 C89 声明:3.8.1 条件包含约束

控制条件包含的表达式应是一个整数常量表达式 [...],形式为

定义标识符

定义(标识符)

如果标识符当前定义为宏名称(即,如果它是预定义的,或者如果它是 #define 预处理指令的主题,而没有具有相同主题标识符的干预 #undef 指令),则其评估为 1,如果它不是。

于 2015-03-10T09:22:15.603 回答