два или более типов данных в спецификаторах объявлений - PullRequest
1 голос
/ 21 августа 2011

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

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 ]

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

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

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

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

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

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

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

#define TRUE 1
#define FALSE 0

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

if (var == TRUE){

}

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

typedef int bool;

EDIT:

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

#include <stdbool.h>
1 голос
/ 21 августа 2011

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

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

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

...