我的 linux 的 gcc 编译器不支持布尔值 [重复]
Posted
技术标签:
【中文标题】我的 linux 的 gcc 编译器不支持布尔值 [重复]【英文标题】:My linux's gcc compiler not supporting boolean values [duplicate] 【发布时间】:2013-02-17 11:54:54 【问题描述】:我正在尝试创建一个返回类型为布尔值的函数......程序的语法似乎是正确的,但编译器给出了错误......
我包含的头文件是:
#include<stdio.h>
#include<stdlib.h>
我创建的函数是:
34.bool checknull(struct node* node)
35. if ( node != NULL )
36. return TRUE;
37.
38. return false;
39.
我在编译时得到的是
bininsertion.c:34:1: error: unknown type name ‘bool’
bininsertion.c: In function ‘checknull’:
bininsertion.c:36:10: error: ‘TRUE’ undeclared (first use in this function)
bininsertion.c:36:10: note: each undeclared identifier is reported only once for each function it appears in
bininsertion.c:38:9: error: ‘false’ undeclared (first use in this function)
我试过用小写和大写字母“真,假”,但似乎没有用...
【问题讨论】:
可能重复***.com/questions/1921539/using-boolean-values-in-c 【参考方案1】:如果需要bool
、true
和false
,则应包括<stdbool.h>
。也是true
,而不是TRUE
。
如果你不想包含stdbool.h
,你可以使用略显丑陋的_Bool
。
【讨论】:
包括 stdbool.h 解决了我的问题...谢谢...您能解释一下稍微难看的部分,即如何使用“_Bool”(语法和示例)... @Sabre.Tooth 像普通类型一样使用它。所以无论你写bool
,你也可以写_Bool
。事实上,_Bool
是 C99 中引入的“真实”类型,bool
只是一个别名。他们不能引入bool
,因为它在以前的标准中不是保留关键字,所以它会破坏已经使用它的程序。
使用 _Bool 我仍然必须包含 stdbool.h,因为编译器将“true”和“false”视为未声明的变量...thnxxx 寻求帮助...
@Sabre.Tooth 是的,或者你可以使用1
和0
。但无论如何,我推荐stdbool.h
。【参考方案2】:
原答案
尝试包含 cstdio 和 cstdlib。可能没有任何区别,但我的编译器也注意到了这些奇怪的错误。曾经有效的东西,现在不再有效
编辑
在 C 中,false 用 0 表示,而 true 用任何非零值表示。
本质上,您可以像这样滚动自己的bool
数据类型
typedef enum false, true bool;
然后你就可以像在你的应用中一样使用它了。
您也可以只包含stdbool.h
,它应该与枚举建议类似
【讨论】:
【参考方案3】:bool 不是数据类型..
它在 Visual Studio 中运行良好.. 因为它是 Microsoft 特定的东西..
只需包含stdbool.h
,它就可以正常工作:)
【讨论】:
aha.. 我刚刚做了一些搜索.. bool 是 C++ 中的一种数据类型.. :) 编辑按钮不起作用..以上是关于我的 linux 的 gcc 编译器不支持布尔值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章