为何(true && true)报错而(1 && 1)不报错?C语言布尔值疑问
为什么GCC 5.1编译使用
true的代码会报错? 嘿,这个问题我刚入门C的时候也踩过一模一样的坑!报错的核心原因其实很明确:在标准C语言里,true并不是默认就存在的标识符,你大概率是把C和C++的特性搞混了。
具体来说:
- C++里
true是天生内置的布尔常量,但C语言直到C99标准才正式引入布尔类型的支持,而且不是直接把true/false变成关键字,而是需要通过包含<stdbool.h>这个头文件来获取它们的定义——这个头文件里把true定义成了值为1的宏,false定义成值为0的宏,同时还提供了bool(等价于原生类型_Bool)这个布尔类型别名。 - 你的代码完全没包含
<stdbool.h>,所以GCC 5.1编译器根本不知道true是什么玩意儿,直接抛出"`true' undeclared"的错误就很正常了。
解决方法超简单,在代码最开头加上这一行就行:
#include <stdbool.h>
如果不想加头文件,也可以用C语言传统的写法——直接用1代替true,0代替false。因为C的条件判断逻辑里,任何非零值都会被判定为“真”,零则是“假”,早期C没有布尔类型的时候大家都是这么写的。比如你的代码可以改成:
if(1 && 1) { // 你的业务逻辑 }
不过还是更推荐包含<stdbool.h>的写法,代码可读性更强,也符合现代C的编码规范。
内容的提问来源于stack exchange,提问作者cdecompilador
相关产品推荐
相关产品推荐

