Хитрость в том, что файл .h используется двумя различными способами - он используется как обычный файл .h, где все глобальные переменные объявлены extern
, и также используется для определения * 1003. * сами глобалы (без extern
). Это уродливый хак, но вы можете понять, почему кто-то счел это необходимым, если у вас большое количество глобальных переменных (верный признак очень плохого дизайна программного обеспечения!).
В любом случае, есть несколько более элегантное решение - вы можете поместить все глобальные переменные в единую глобальную структуру, например,
//
// globals.h
//
typedef struct {
int a;
int b;
// ...
int z;
} Globals;
extern Globals globals; // declaration
-
//
// globals.c
//
#include "globals.h"
Globals globals; // definition
-
Тогда, когда вам нужно обратиться к глобальному, это, например, globals.a
вместо просто a
, что может показаться неудобством, но это, возможно, яснее и более управляемо, чем просто разбросанные по всему коду голые глобалы.