Ответ 1
bool
не существует как ключевое слово pre-C99.
В C99 он должен работать, но, как @pmg указывает ниже, он по-прежнему не является ключевым словом. Это макрос, объявленный в <stdbool.h>
.
Когда я пытаюсь скомпилировать функцию с возвращаемым типом 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 или нет?
bool
не существует как ключевое слово pre-C99.
В C99 он должен работать, но, как @pmg указывает ниже, он по-прежнему не является ключевым словом. Это макрос, объявленный в <stdbool.h>
.
попробуйте включить:
#include <stdbool.h>
#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");
}
способ сделать ручную 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