Два или более типов данных в спецификаторах объявлений
Я посмотрел вокруг и попробовал несколько вещей, ничего не работает в данный момент.
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>