在框架中使用自定义真假值的原因

Reason for using custom true false values in frameworks

我正在阅读 GLFW 库,我注意到他们使用 GLFW_TRUE(1) 和 GLFW_FALSE(0)。现在我已经在其他框架中看到了,制作他们自己的自定义 true/false 标识符。在框架中创建自己的自定义 true/false 枚举或 类 是否有任何理由?例如,它是否使代码更具可读性?是兼容性问题吗?

另一位程序员推测他们可能不想 #include <stdbool.h> 但 header 实际上是 very small 并且不会使依赖关系过于复杂

我猜这是为了向后兼容的原因。 stdbool.h header 是在 C99 标准中引入的。

Is there any reason in creating your own custom true/false enums or classes in a framework?

  • 支持旧的或损坏的编译器(C99 不兼容,没有 stdbool.h_Bool 类型)
  • 使用外部工具进行静态类型检查(如 cppcheck
  • 编译器的强类型检查(考虑自定义转换的 C++ 类)
  • 主观代码可读性

Does it make the code more readable for example?

是主观的。为某人,不为别人。

Is it a compatibility issue?

很可能是。


在 GLFW 的情况下,它是在 ~2002 年为 windows 编写的(根据此站点 https://www.glfw.org/changelog )。我猜作者使用的 windows 编译器没有 stdbool.h。无论哪种方式,请询问库的作者。

可能是为了可读性问题和控制框架的流程。

I was reading the GLFW library and I noticed they use GLFW_TRUE(1) and GLFW_FALSE(0). Now I've already seen that in other frameworks as well,making their own custom true/false identifiers. Is there any reason in creating your own custom true/false enums or classes in a framework? Does it make the code more readable for example? Is it a compatibility issue?

如果您打算在不同的环境中使用您的库,您可以很容易地找到一个头文件中缺少这些定义的库。最早值得注意的例子是开发 curses 库时(还没有 <stdbool.h>,不是标准库中定义的 bool 类型)

在那些情况下,最好自己提供一个定义,但如果您不想 class 使用标准定义,则必须使用一些前缀来定义您的定义,以便您区分您在其他库中的定义。

在 C 中,bool 只是 int 的一个子集,true 继续表示 != 0 而 false 始终是 0。如果您需要赋值,一些作者倾向于使用 -1 作为 true 的值(通常情况下不是这样,1 和 -1 明显不同)