【问题标题】:Is boolean return type allowed in C?C 中是否允许布尔返回类型?
【发布时间】:2011-10-25 18:14:20
【问题描述】:

当我尝试在 GCC 编译器中编译返回类型为 bool 的函数时,编译器会抛出此错误。

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘comp’

但是当我将返回类型更改为int 时,它就编译成功了。

功能如下。

bool comp(struct node *n1,struct node *n2)
{
    if(n1 == NULL || n2 == NULL)
    return false;
    while(n1 != NULL && n2 != NULL)
    {
        if(n1->data == n2->data)
        { n1=n1->link; n2=n2->link; }
        else
            return false;

    }
    return true;
}

这里我比较了两个链表。 C 是否支持 bool 返回类型?

【问题讨论】:

  • 如果 n1 和 n2 都为 NULL,您可能希望返回 true。

标签: c boolean


【解决方案1】:

bool 在 C99 之前不作为关键字存在。

在 C99 中,它应该可以工作,但正如 @pmg 在下面指出的那样,它仍然不是关键字。这是在<stdbool.h> 中声明的宏。

【讨论】:

  • +1 bool 是 C99 关键字和预定义类型 _Bool 的 typedef(在 <stdbool.h> 中)。
  • bool 在 C99 中也不是关键字,它是 定义的宏,如果你想使用它,你需要包含它。 (哦,有人在我查资料时说这个,我忘了刷新。抱歉重复。)
  • 感谢您的回答。这澄清了我的疑问。 +1。
【解决方案2】:

尝试包括:

#include <stdbool.h>

【讨论】:

    【解决方案3】:
    #include<stdio.h>
    #include<stdbool.h>
    void main(){
        bool x = true;
        if(x)
            printf("Boolean works in 'C'. \n");
        else
            printf("Boolean doesn't work in 'C'. \n");
    }
    

    【讨论】:

    • 请添加一些内容
    【解决方案4】:

    一种手动​​ bool 的方法

    #define true 1
    #define false 0
    typedef int bool;
    
    bool comp(struct node *n1,struct node *n2)
    {
        if(n1 == NULL || n2 == NULL)
        return(false);
        while(n1 != NULL && n2 != NULL)
        {
            if(n1->data == n2->data)
            { n1=n1->link; n2=n2->link; }
            else
                return(false);
    
        }
        return true;
    

    即它返回 1 或 0,但您可以友好地得到真假;

    毕竟 bool 是 1 或 0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-15
      • 2016-12-06
      • 2016-04-09
      • 1970-01-01
      • 2013-11-29
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多