Во-первых, не определяйте переменные в заголовках. Используйте квалификатор extern
при объявлении переменной в заголовочном файле и определите ее в одном (не обоих) ваших файлах C или в своем новом новом файле, если вы предпочитаете.
Заголовок:
extern char c;
реализация:
#include <header.h>
char c = 0;
Кроме того, вы можете оставить определение в заголовке, но добавить static
. Использование static
приведет к другому поведению программы, чем использование extern
, как в примере выше, поэтому будьте осторожны. Если вы сделаете это static
, каждый файл, содержащий заголовок, получит свою собственную копию c
. Если вы используете extern
, они поделятся одной копией.
Во-вторых, используйте защиту от двойного включения:
#ifndef HEADER_H
#define HEADER_H
... header file contents ...
#endif