我的Linux的gcc编译器不支持布尔值。

7

我正在尝试编写一个返回布尔值的函数...程序的语法似乎是正确的,但编译器却出现了错误...

我已经包含了以下头文件:

#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)

我尝试过使用大小写不同的"TRUE,false",但似乎没有起作用...


可能重复的问题 https://dev59.com/hnI-5IYBdhLWcg3wTWdu - yuan
3个回答

22
如果您想使用booltruefalse,则应包含<stdbool.h>。此外,正确的写法是true而不是TRUE
如果您不想包含 stdbool.h,您可以使用略微丑陋的 _Bool

包含 stdbool.h 解决了我的问题...谢谢你...你能否解释一下那个有点丑的部分,即如何使用 "_Bool"(语法和示例)... - Sabre.Tooth
@Sabre.Tooth 使用它就像使用普通类型一样。所以无论您在哪里写bool,您也可以写_Bool。事实是_Bool是“真正”的类型,在C99中引入,而bool只是一个别名。他们不能引入bool,因为它不是以前标准中的保留关键字,因此它会破坏已经使用它的程序。 - cnicutar
使用 _Bool 时,我仍然需要包含 stdbool.h,因为编译器将 "true" 和 "false" 视为未声明的变量...感谢您的帮助... - Sabre.Tooth
1
@Sabre.Tooth 是的,你也可以使用 10。但是我强烈推荐使用 stdbool.h - cnicutar

-1

bool 不是一种数据类型..
它在Visual Studio中运行良好..因为这是一个Microsoft特定的东西..
只需包含stdbool.h,它就可以正常工作 :)


1
啊哈..我刚进行了一些搜索..bool是C++中的一种数据类型..:) 然而编辑按钮没有起作用.. - geekybedouin

-1

原始答案

尝试包括 cstdio 和 cstdlib。可能没有任何区别,但我也注意到我的编译器出现了这些奇怪的错误。曾经有效的东西现在不再起作用。

编辑

在 C 语言中,false 是由 0 表示的,而true是由任何非零值表示的。

基本上,您可以像这样自定义bool数据类型

typedef enum {false, true} bool;

然后你可以像在你的应用程序中一样使用它。

你也可以只包含stdbool.h,它应该有类似于枚举建议的东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接