Допустим ли тип boolean return в C?

Когда я пытаюсь скомпилировать функцию с возвращаемым типом 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 или нет?

Ответ 1

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

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

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

Ведь bool это 1 или 0