在C中使用布尔值
C没有任何内置的布尔类型。 在C中使用它们的最佳方式是什么?
选项1
typedef int bool;
#define true 1
#define false 0
选项2
typedef int bool;
enum { false, true };
选项3
typedef enum { false, true } bool;
备选案文4(C99)
#include <stdbool.h>
说明
如果你还没有决定,那就去#3吧!
关于C语言中布尔值的一些想法:
我足够老了,我只是使用plain int
s作为我的布尔类型,没有任何typedefs或特殊的定义或枚举true / false值。 如果你按照我的建议不要与布尔常量进行比较,那么你只需要使用0/1来初始化标志。 然而,在这些近代,这种做法可能被认为是过于反动的。 在这种情况下,应该明确使用<stdbool.h>
因为它至少具有标准化的好处。
无论调用什么布尔常量,只能将它们用于初始化。 永远不要写类似的东西
if (ready == TRUE) ...
while (empty == FALSE) ...
这些可以总是被更清楚的代替
if (ready) ...
while (!empty) ...
请注意,这些实际上可以合理且可以理解地大声朗读。
给你的布尔变量正面名称,即full
而不是不notfull
。 后者导致难以阅读的代码。 比较
if (full) ...
if (!full) ...
同
if (!notfull) ...
if (notfull) ...
前者一对自然地阅读,而!notfull
虽然很难阅读,但在更复杂的布尔表达式中变得更糟。
布尔参数通常应该避免。 考虑一个像这样定义的函数
void foo(bool option) { ... }
在函数的主体中,非常清楚这个参数的含义,因为它有一个方便且有希望的意义名称。 但是,通话网站看起来像
foo(TRUE);
foo(FALSE):
在这里,根本不可能告诉参数意味着什么,而不总是查看函数定义或声明,并且如果添加更多布尔参数,它会变得更糟糕。我建议
typedef enum { OPT_ON, OPT_OFF } foo_option;
void foo(foo_option option);
要么
#define OPT_ON true
#define OPT_OFF false
void foo(bool option) { ... }
无论哪种情况,呼叫站点现在看起来都像
foo(OPT_ON);
foo(OPT_OFF);
读者至少有一个理解的机会,而不是疏浚foo
的定义。
C中的一个布尔值是一个整数:零代表假,非零代表真。
另见布尔型数据类型,C,C ++,Objective-C,AWK。
链接地址: http://www.djcxy.com/p/25139.html