Разрешен ли логический тип возврата в C? - PullRequest
12 голосов
/ 12 августа 2011

Когда я пытаюсь скомпилировать функцию с типом возврата bool в компиляторе GCC, компилятор выдает мне эту ошибку.

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;
}

Здесь я сравниваю два связанных списка.Поддерживается ли тип возврата bool в C или нет?

Ответы [ 4 ]

21 голосов
/ 12 августа 2011

bool не существует как ключевое слово pre-C99.

В C99 это должно работать, но, как указывает @pmg ниже, это все еще не ключевое слово. Это макрос, объявленный в <stdbool.h>.

8 голосов
/ 12 августа 2011

попробуйте включить:

#include <stdbool.h>
2 голосов
/ 28 апреля 2015
#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");
}
0 голосов
/ 11 июля 2019

способ сделать 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, но, к счастью, вы получаете как true и false;

В конце концов, bool равен 1 или0

...