sagen, dass ich eine Übersetzungseinheit file1.c, die erklärt, eine Datei-scope Variable wie so haben denn dasIst es gültig, ein externes globales als const zu behandeln, wenn die Definition nicht const ist?
int my_variable = 12;
Dann in einer anderen Übersetzungseinheit file2.c, erstelle ich eine extern-Deklaration Variable, aber erklären ihn als const
:
extern const int my_variable;
Dies kompiliert und funktionieren mit gcc, mit -Wall -Wextra -ansi -pedantic
. Der C89-Standard sagt jedoch Damit zwei qualifizierte Typen kompatibel sind, müssen beide die identisch qualifizierte Version eines kompatiblen Typs haben. Das Hinzufügen von const
zu der Deklaration fügt eine Einschränkung hinzu, anstatt eine zu vermeiden. Ist das sicher und gültig? Was wäre die beste Vorgehensweise, um dies mit Header-Dateien einzurichten?
Könnte der Compiler würde sich beschweren, wenn es andersherum war, wenn Sie den 'const'Qualifikator verwerfen. Aber ich bin mir nicht wirklich sicher. –
Ich bin mir ziemlich sicher, dass [C - Zugriff auf eine nicht-const const-Deklaration] (http://stackoverflow.com/q/8051969/1708801) diesen Fall abdeckt. –
Es lohnt sich wahrscheinlich, die genaue C-Standardversion anzugeben, auf die Sie sich beziehen. – Clifford