在框架中使用自定义真假值的原因
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 明显不同)
我正在阅读 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 明显不同)