2017-10-24 2 views
1

Nur eine einfache Frage für das Verständnis:Globals erklärte in h-Datei und den Zugang zu ihnen

Variable extern int x_glob in Header glob.h deklariert wird.

so in jeder c-Datei, die in glob.h mit dieser Variable deklariert Funktionen enthält Ich habe es zu definieren agin wie folgt aus:

extern void func_1(void) 
{ 
    int x_glob; 

    glob_x++; 
    return(); 
} 

Ist das richtig?

Wenn ich das externe Wort auf der Deklaration von x_glob in glob.h lasse, brauche ich die Definition nicht.

Warum nicht weg das extern Wort in der Header-Datei?

Vielleicht klingt diese Frage dumm - mein Ziel ist es, eine bessere Struktur in meine Programmierung zu bekommen, wie die Projekte wachsen.

+0

Wenn Sie eine bessere Strukturierung in Ihrem Code wünschen, beginnen Sie mit avoding globals so weit wie möglich an erster Stelle. – Devolus

Antwort

3

Nein, das ist falsch. Mit int x_glob innerhalb einer Funktion deklarieren Sie eine lokale, automatische Variable. Dies überschreibt jede globale Variable.

Aber in einer C-Datei genau müssen Sie die globale Variable deklarieren:

// main.c 

int x_glob; 

Dies erzeugt eine Variable, die nun von allen Modulen verwendet werden können. Die Version extern der Variablen teilt dem Compiler nur mit, wenn er die anderen Module kompiliert, an denen diese Variable vorhanden ist, und sie wird beim Verbinden der Module mit der ausführbaren Datei gefunden.

Persönlich bevorzuge ich das folgende Set-up:

// glob.h 
#ifndef EXTERN 
#define EXTERN extern 
#endif 
EXTERN int x_glob; 

// module.c 
#include "glob.h" 

// main.c 
#define EXTERN 
#include "glob.h" 

In allen Modulen x_glob als extern bekannt sein und in Haupt wird es nicht extern sein und so wird die Speicherung für die globale Variable deklariert.

+1

"* mindestens *" -> "* genau *". Andernfalls sollte die Verknüpfung für mehrere Definitionen fehlschlagen. –

+0

Danke mein Freund - es gab zu viele Bäume, um den Wald zu sehen – dagute

+0

@Dagute, dann klicken Sie auf den Button auf der linken Seite, um meine Antwort zu akzeptieren. Freut mich, Ihnen geholfen zu haben. –