【问题标题】:Should I use C(99) booleans ? ( also c++ booleans in c++ ?)我应该使用 C(99) 布尔值吗? (也是 c++ 中的 c++ 布尔值?)
【发布时间】:2023-03-02 23:24:02
【问题描述】:

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

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

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

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

【问题讨论】:

  • Visual Studio 在编译 C 代码时不支持 C99 风格的 bool(或 stdbool.h) - 至少在 VS 2010 之前是这样。

标签: c++ c boolean c99


【解决方案1】:

在 C++ 中,没有理由不使用它。在 C 语言中,我只使用 int 来完成这项任务,没有任何 #define 或类似的东西。在我看来,isDefinition 之类的变量名称足以清楚地表明正在发生的事情。

当然,定义自己的 bool 或使用 <stdbool.h> 的 bool 并没有错。

【讨论】:

  • 定义自己的而不是使用标准的标头是有问题的,除非您有充分的理由这样做。
  • @Stephen 我怀疑这个很好的理由对大多数人来说是可移植性的:)
  • 定义你自己的 bool 会给你带来 bool 被引入来解决的问题之一。内置的 _Bool(或 bool)类型确保任何两个真正的布尔值将相互比较。
【解决方案2】:

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

【讨论】:

  • 一般我同意文字,但在这种情况下,0 本质上是 C 中“false”的拼写方式。
  • 是的,我可以给 0 通行证,因为它也是表示 NULL 的合法方式。
【解决方案3】:

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

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

【讨论】:

  • 即使这样,在标题中定义正确的类型也不难。
【解决方案4】:

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

【讨论】:

  • +1 提出这个问题。但是,非零本质上是“真”的 C。任何故意混合按位和布尔运算符的人都应该得到他们所得到的。任何意外的人都是 C 语言设计者的另一个可悲的受害者。
【解决方案5】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 2010-12-27
    • 2013-11-04
    • 2011-03-17
    • 1970-01-01
    • 2017-08-14
    相关资源
    最近更新 更多