Dire che ho un'unità di compilazione file1.c, che dichiara una variabile di file-scope in questo modo:È valido trattare un extern globale come const quando la definizione non è const?
int my_variable = 12;
Poi, in un'altra unità di compilazione file2.c, creo una dichiarazione extern per questo variabile, ma dichiararla come const
:
extern const int my_variable;
Questo compilerà e lavorare bene con gcc, utilizzando -Wall -Wextra -ansi -pedantic
. Tuttavia, lo standard C89 dice Per la compatibilità di due tipi qualificati, entrambi devono avere la versione identicamente qualificata di un tipo compatibile. L'aggiunta di const
alla dichiarazione aggiunge una restrizione anziché evitarne una. Questa C è sicura e valida? Quale sarebbe la migliore pratica nell'impostazione di questo con i file di intestazione?
Potrebbe essere che il compilatore si lamenterebbe se fosse il contrario, se si scartasse il 'const' quialifier. Ma non ne sono veramente sicuro. –
Sono abbastanza sicuro che [C - Accedere a una dichiarazione const const da non-const] (http://stackoverflow.com/q/8051969/1708801) copre questo caso. –
Probabilmente vale la pena specificare l'esatta versione standard C a cui ti riferisci. – Clifford