C++ 我应该使用C(99)布尔值吗?(也是c+;+;+;?)中的c+;&#booleans)

C++ 我应该使用C(99)布尔值吗?(也是c+;+;+;?)中的c+;&#booleans),c++,c,boolean,c99,C++,C,Boolean,C99,我没有做过太多的c编程,但当我需要一个false时,我会在需要true时放0,我会放1,(例如while(1)),在其他情况下,我会使用“while(ptr)”或“if(x)”之类的词 我是否应该尝试使用C99布尔值,如果我正在帮助新编程人员学习c基础知识(想想cs 1??学生),我是否应该向其他人推荐它们 我很确定VisualStudio编译器支持c99 bools,但是很多项目(工业上的开源和c应用程序)都是为c89编译的吗?如果我不使用C布尔,我应该至少做一些类似于#定义真1#定义假0的事

我没有做过太多的c编程,但当我需要一个false时,我会在需要true时放0,我会放1,(例如while(1)),在其他情况下,我会使用“while(ptr)”或“if(x)”之类的词

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

我很确定VisualStudio编译器支持c99 bools,但是很多项目(工业上的开源和c应用程序)都是为c89编译的吗?如果我不使用C布尔,我应该至少做一些类似于#定义真1#定义假0的事情吗


< C++ >布尔C++( 是的,当可用时,你应该使用语言抽象。当我使用旧的C编译器时,我仍然会创建一些布尔的抽象。在代码中使用文字是一个非常差的实践。在C++中,

没有理由不使用它。在C语言中,我只使用
int
来完成这个任务,没有任何
#define
之类的东西。在我看来,像
isDefinition
这样的变量名足够清楚地表明发生了什么


当然,定义自己的布尔或使用<代码> <代码>没有错。

C++布尔函数是很好的,因为它们是语言的一部分,并且基本上是由任何C++编译器支持的。
C99布尔值似乎是个好主意,但请记住,您今天编写的代码是否需要用于C89项目…

当编译器知道变量是布尔值时,它可以进行更好的优化。此外,在使用int时,在按位上下文中使用错误更容易,因为在C++中,可以使用无意中将1以内的值设置为“<

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

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

像这样的东西可能会坏掉,甚至在不同的编译器/操作系统下可能会有不同的行为。

一般来说,我同意文字,但在这种情况下,
0
本质上是C拼写“false”的方式.是的,我可以给0一个通行证,因为它也是表示NULL的合法方法。+1表示这个。但是,非零本质上是C表示“true”。任何故意混合使用位运算符和布尔运算符的人都应该得到他们应得的。任何偶然这样做的人都是C语言设计者的又一个可悲的受害者。即使如此,在标题中定义正确的类型也不难。除非你有充分的理由,否则定义自己的类型而不是使用标准标题是有问题的斯蒂芬,我想这是一个很好的理由,对于大多数人来说是可移植的:)定义你自己的bool会给你留下bool要解决的一个问题。内置Bool(或Bool)类型确保任意两个真正的布尔值之间的比较相等。Visual Studio在编译C代码时不支持C99样式的
Bool
(或
stdbool.h
),至少在VS 2010中是这样。