Два или более типов данных в спецификаторах объявлений

Я посмотрел вокруг и попробовал несколько вещей, ничего не работает в данный момент.

main.c:13: error: two or more data types in declaration specifiers
make[1]: *** [main.o] Error 1
make: *** [build] Error 2

Мой код в значительной степени такой (я закомментировал все, так что это не что-то другое + нет никаких других файлов, кроме этого);

main.h

struct savetype{
    bool file_exists;
}

main.c

#include "main.h"
extern struct savetype save;
int main (void){
return 0;
}

stuff.c

#include "main.h"
struct savetype save;
save.file_exists=true;

3 ответа

Объявления структуры C должны заканчиваться точкой с запятой. Поставьте точку с запятой в конце объявления структуры в main.h и ты будешь в порядке.

Также должен быть bool тип, доступный вам, если у вас нет другого кода, определяющего его. В C используйте int вместо бул.

Более того, нет такой вещи как true в стандарте С; 0 - это ложь, а все остальное - правда, так что вам также придется исправлять stuff.c.

Кроме того, stuff.c не должен компилироваться, потому что он содержит код (больше, чем просто объявления) вне какой-либо функции (в частности, save.file_exists = true;,

Это проблема:

struct savetype{
    bool file_exists;
};
^^^^ <-------------- Here!

Вы забыли точку с запятой в конце.

Тип bool не существует в C. Вы можете использовать макрос, чтобы использовать значения TRUE/FALSE удобным способом:

#define TRUE 1
#define FALSE 0

тогда вы можете использовать его в условных выражениях, таких как:

if (var == TRUE){

}

если вы хотите использовать "bool" в качестве ключевого слова:

typedef int bool;

РЕДАКТИРОВАТЬ:

Я не знал этого, но @ Pero указал, что из C99 были введены логические типы. Для их использования включают следующий прототип:

#include <stdbool.h>
Другие вопросы по тегам