Подключение констант из заголовочного файла

Имеется заголовочный файл Constants.h, в котором определены константы. SS_INF_ROOTS используется в main. Тип Bool используется в main и в другом заголовочном файле Functions.h, в котором определены прототипы функций, а также в файлах , в которых содержатся функции.

Constants.h:

#ifndef Functions_h
#define Functions_h

const int SS_INF_ROOTS = -1;

typedef enum Bool {
    FALSE,
    TRUE
} Bool;

#endif

Файл Functions.h с прототипами функций:

#ifndef Functions_h
#define Functions_h

double checkDoubleOverflow(double d1, double d2, int x);

void nCheckDouble (double a, double b, double c,
                double *x1, double *x2);

Bool EqualZero (double d);

void LinSolve (double a, double b, double *x1);

int SquareSolve (double a, double b, double c,
                     double *x1, double *x2);
            
#endif

Далее происходит ошибка идентификатор "Bool" не определен. Как надо подключить заголовочный файл Constans.h, чтобы константы и типы объявленных в днем данных работали в файлах , где хранятся функции и в другом заголовочном файле Functions.h? Компилятор gcc.


Ответы (1 шт):

Автор решения: AlexGlebe

Для ускорения компиляции больших проектов хедеры разделены по частям. Какая-то часть пользуется одним, какая-то другим. В хедерах присутсвует блокировка повторной обработки с помощью макросов. Без этой блокировке могут быть ошибки повторного объявления структур.

Ошибка первая : макросы у разных файлов должны быть разными.

Ошибка вторая : в предварительном объявлении функций не подключили объявление типа Bool.

Ошибка третья : объявление переменных не должны быть в хедерах. При компиляции второго файла будет конфликт, что переменная ещё одна появилась с таким-же именем.

Вот рабочий пример самой растянутой реализации :

type.h :

#ifndef Type_h
#define Type_h

typedef enum Bool Bool;

#endif

constants.h :

#ifndef Constants_h
#define Constants_h

extern  const int SS_INF_ROOTS ;

enum Bool {
    FALSE,
    TRUE
} ;

#endif

functions.h :

#ifndef Functions_h
#define Functions_h

double checkDoubleOverflow(double d1, double d2, int x);

void nCheckDouble (double a, double b, double c,
                double *x1, double *x2);

# include "type.h"

Bool EqualZero (double d);

void LinSolve (double a, double b, double *x1);

int SquareSolve (double a, double b, double c,
                     double *x1, double *x2);
            
#endif

const.c :

# include "constants.h"
const int SS_INF_ROOTS = -1;

main.c :

# include "constants.h"
# include "functions.h"

int main(){
  int i = SS_INF_ROOTS ;
}
→ Ссылка