Во-первых, определение данных или функций в заголовочных файлах - плохая практика в программировании на Си. В DataTypes.h
вы не просто объявляете переменную count
, но вы определяете это.
На самом деле происходит то, что count
определяется отдельно в каждой единице перевода, и после связывания вы получаете две переменные. Компоновщик не объединяет их, потому что они помечены static
, что означает, что они должны быть локальными для единицы перевода.
Если вы хотите, чтобы переменная count
была разделена между единицами перевода TreeOps.c
и TreeMain.c
, вы должны использовать extern
в заголовочном файле, который только объявляет это:
extern int count;
А затем глобально определите его как int count
в TreeOps.c
или TreeMain.c
.