我从C和OpenGL开始,遇到了这样的情况:我想将true和false作为布尔值,但无法获得它们,因为它们在C中并不存在。然后我想出了使用#define
在utils.h中定义它们的想法。无论如何,我在几乎所有其他文件中都使用,但我想检查一下这是否符合标准,或者是否有什么原因不应该这样做。然后我看到了一个网站,它清楚地表明,为了方便起见,这是可以的,但有一个小部分让我感到困惑:
To make life easier, C Programmers typically define the terms "true" and "false" to
have values 1 and 0 respectively.
In the old days, this was done using #define:
#define true 1
#define false 0
Today it is better to use const int instead of #define:
const int true = 1;
const int false = 0;
这是真的吗?如果是,为什么会更好?
最终,我只选择了stdbool.h
,正如那里所描述的那样,但另一件事真的让我感到困惑。
使它们成为const int
的好处是它们是合适的变量,在定义和使用它们时不会出错,#define
s通常就是这样。
但是,我不会说让它们成为const int
更好,因为它们不能用于需要编译时常量表达式的地方。我建议:
enum { false, true };
这将给您带来与使它们成为const int
相同的好处(它们实际上是const int
,但却是编译时间常数),但在需要编译时间常数表达式的情况下,它们也可以使用。