【问题标题】:Why do some include guards have a defined value?为什么有些包含守卫具有定义的值?
【发布时间】:2014-06-20 09:18:17
【问题描述】:

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

#ifndef FILENAME_H
#define FILENAME_H

...

#endif // FILENAME_H

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

#ifndef FILENAME_H
#define FILENAME_H 1

...

#endif // FILENAME_H

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

这样做有什么理由吗?

【问题讨论】:

    标签: include include-guards


    【解决方案1】:

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

    甚至 C89 状态: 3.8.1 条件包含 约束

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

    定义的标识符

    定义(标识符)

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

    【讨论】:

    • 遗憾的是我不记得我在哪里看到的,它可能是一些数学函数库。不过它是在 linux 下的。
    猜你喜欢
    • 2023-03-28
    • 2017-11-27
    • 2022-01-22
    • 2015-03-04
    • 2012-01-19
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    相关资源
    最近更新 更多