据我所知,有三种方法可以在c中使用布尔值
#define FALSE 0 ... #define TRUE !(FALSE)我错过了其他方法吗?不同方法的优缺点是什么?
我想最快的是3号,2号更容易读取(尽管按位否定会略微增加开销),1是最易读的,与所有编译器不兼容.
Chr*_*ung 100
只是包括<stdbool.h>,如果你的系统提供了它.它定义了许多宏,包括bool,false和true(分别定义为_Bool0和1).有关详细信息,请参阅C99的第7.16节.
b.r*_*oth 18
只需在代码中直接使用0或1即可.
对于C程序员来说,这就像真或假一样直观.
Mac*_*rse 14
我通常做一个:
typedef enum {FALSE = 0, TRUE} boolean;
Run Code Online (Sandbox Code Playgroud)
使用 stdbool.h 定义的 bool 类型,当您需要将代码从支持 bool 类型的较新编译器移动到较旧编译器时会出现问题。当您使用基于旧版本规范的 C 编译器迁移到新架构时,这可能会发生在嵌入式编程环境中。
总而言之,当便携性很重要时,我会坚持使用宏。否则,按照其他人的建议并使用内置类型。
无论您选择这三个中的哪一个,将您的变量与 FALSE 或 false 进行比较。
从历史上看,在 c 或 c++ 中将任何内容与 true (1)进行比较是一个坏主意。只有 false 保证为零 (0)。True 是任何其他值。许多编译器供应商在其头文件中的某处都有这些定义。
#define TRUE 1
#define FALSE 0
Run Code Online (Sandbox Code Playgroud)
这导致太多人走上花园小径。除了成功之外,许多库函数还chartype返回不等于的非零值1。有大量具有相同行为的遗留代码。