2

我没有做过太多的 c 编程,但是当我需要 false 时,我输入 0,当我想要 true 时,我输入 1,(例如 while(1)),在其他情况下,我使用诸如“while(ptr)”之类的东西或“如果(x)”。

我是否应该尝试使用 C99 布尔值,如果我正在帮助刚接触编程的人学习 c 基础知识(考虑 cs 1?? 学生),我应该将它们推荐给其他人吗?

我很确定 Visual Studio 编译器支持 c99 布尔值,但是很多项目(工业中的开源和 c 应用程序)是否为 c89 编译?如果我不使用 C bools,我至少应该做一些类似#define TRUE 1 #define FALSE 0 的事情吗?

还有c ++布尔值(对于c ++)呢?

4

5 回答 5

5

在 C++ 中,没有理由不使用它。在 C 中,我只int用于这个任务,没有任何#define或类似的东西。在我看来,像这样的变量名称isDefinition足够清楚地表明正在发生的事情。

当然,定义自己的 bool 或使用<stdbool.h>.

于 2010-06-09T21:51:41.800 回答
3

是的,您应该在可用时使用语言抽象。当我使用较旧的 C 编译器时,我仍然会创建一些布尔抽象。在代码中使用文字是一种非常糟糕的做法。

于 2010-06-09T21:49:40.203 回答
2

当编译器知道变量是布尔值时,它可以进行更好的优化。此外,当使用整数时,在按位上下文中使用时更容易引入错误,因为整数可能会无意中设置为 1 以外的值

于 2010-06-09T21:55:59.897 回答
2

C++ 布尔值很好,因为它们是语言的一部分,并且现在基本上任何 C++ 编译器都支持它们。

C99 布尔值似乎是个好主意,但请记住您今天编写的代码是否需要在 C89 项目中使用......

于 2010-06-09T21:52:55.097 回答
1

在 C++ 中使用 bool。它已经存在多年,每个 C++ 编译器都支持它,如果您的代码需要其他 C99 功能,请在 C 中使用它。不要在 C99 之前的代码中使用它,因为任何非零值都将被解释为 true,并且使用定义可能会导致难以追踪的错误(一些 C 库函数被记录为返回任何非零 int价值,即使写类似的东西通常是不好的做法

if (var==TRUE) { ... }

这样的事情可能会破坏,甚至可能在不同的编译器/操作系统下表现不同。

于 2010-06-09T22:34:39.700 回答