c-为什么在声明true和false时使用const int而不是#define



我从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的好处是它们是合适的变量,在定义和使用它们时不会出错,#defines通常就是这样。

但是,我不会说让它们成为const int更好,因为它们不能用于需要编译时常量表达式的地方。我建议:

enum { false, true };

这将给您带来与使它们成为const int相同的好处(它们实际上是const int,但却是编译时间常数),但在需要编译时间常数表达式的情况下,它们也可以使用。

最新更新