Definitioner av globala variabler i C. Var?

Permalänk

Definitioner av globala variabler i C. Var?

Denna fråga kan tyckas basic men ofta förbiser jag saker som är viktiga.

Låt oss säga att ett C-projekt (för en embedded MCU) består av 20 filer, både *.c och *.h. Sen vill jag ha ett antal globala variabler vars scope är över hela projektet.
Då kan jag deffa dem ovanför main() i filen main.c och sen ha extern deklareringar i de filer som nyttjar dem.
Ett annat alternativ är att jag definierar globala variabler i en separat include-fil, typ globala_vars.h och placerar den som #include i main.c. Sen har jag som vanligt extern deklareringar i de filer som nyttjar variablerna.

Hur gör ni? Finns nåt formellt fel här? Finns andra lösningar?

Permalänk
Medlem

Undvik globala variabler så gott det går är väl första regeln, globala variabler är ett anti-pattern. Globala konstanter är såklart ok.

Samtidigt gäller de vanliga reglerna, deklarera dem så nära där de används som möjligt.

Permalänk
Medlem

Det går att göra på många olika sätt och få det att fungera, men en bra regel att följa är att aldrig någonsin definiera några variabler i en .h fil.

Deklarera variablerna i en .h fil som sedan kan inkluderas i de filer som använder variablerna, men definiera dem i en .c fil.

Permalänk
Skrivet av dlq84:

Undvik globala variabler så gott det går är väl första regeln, globala variabler är ett anti-pattern. Globala konstanter är såklart ok.

Samtidigt gäller de vanliga reglerna, deklarera dem så nära där de används som möjligt.

Jag deklarerar gärna i den funktion som använder variabeln.

Permalänk
Skrivet av Erik_T:

Det går att göra på många olika sätt och få det att fungera, men en bra regel att följa är att aldrig någonsin definiera några variabler i en .h fil.

Deklarera variablerna i en .h fil som sedan kan inkluderas i de filer som använder variablerna, men definiera dem i en .c fil.

Det blir det högt upp i main.c vilket känns också helt rätt. Att lägga def. i en h-fil är awkward kan jag tycka.