在C中,true是不为0的任何东西(但我们经常使用枚举为状态定义值)。所以,做试验的真理,我们可以做到以下几点:如何处理Tribools
typedef enum
{
FALSE,
TRUE
} BOOL;
// Some function
BOOL n = isTrue();
if (n)
{
// Do something
}
其中还有一些争论,但我和其他人喜欢:
if (n == TRUE)
{
// Do something
}
但是,如果由于某种原因,isTrue()
函数返回一个值除了1以外,那么后者不起作用,而真则被视为错误。
我一直在经历一个代码审查标志着第一种方式要做到这一点的方式。但是我突然意识到,有时我们需要第三个状态的概念,当一个值没有被设置时。但是,它甚至有可能做到这一点在C和还是做我们的布尔比较在第一种方式,因为它似乎如果我们指定的任何其他值是这个“NULL”值,那么它仍然会记录为真正的
恕我直言,第一个变体是**不是**首选到第二个。第二种方法更具可读性,除非你有适当的变量名称,比如'isBlue'等。 – Matthias
@Matthias,它肯定是第二种,如果它只是因为'TRUE'不是标准中定义的,要使用的值是“true”或“1”。但对于'bool'来说,第一个是非常可取的。是否可以讨论这是针对其他类型的,比如指针,但不适用于'bool'。 –
我不确定现在是否在C标准中存在布尔类型。大多数地方我都用c往往有真假这或许我应该让以上 – Firedragon