Deklarieren einer globalen Variablen "extern const int" im Header, aber nur "int" in der Quelldatei

ch habe mit GCC experimentiert und festgestellt, dass Sie externe Variablen deklarieren könneconst in Header-Dateien, aber in Implementierungsdateien veränderbar.

BEARBEITE: Das geht eigentlich nicht. Der einzige Grund, warum ich meinen Testcode kompilieren ließ, war, dass ich "header.h" nicht in "header.c" aufgenommen habe.

header.h:

#ifndef HEADER_H_
#define HEADER_H_

extern const int global_variable;

#endif

header.c:

int global_variable = 17;

Dies scheint eine sehr gute Funktion zu sein, um @ zu behalteglobal_variable Readonly an die Benutzer vonheader.h aber durch die Implementierung modifizierbar halten header.c).

HINWEIS Der folgende Code ist nur ein Beispiel dafür, wie diese Art der Deklaration die Zuweisung zu @ verhinderglobal_variable.

#include "header.h"

int main(void)
{
    global_variable = 34; /* This is an error as `global_variable` is declared const */
    return 0;
}

Weil ich noch nie eine Technik in der Praxis gesehen habe. Ich frage mich, ob es gültig ist.

Ist dies ein klar definierter Verhaltensfehler oder ist dies ein Fehler, vor dem GCC mich nicht warnt?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage