On extern
: come regola, no. L'unica cosa che dovrebbe essere condivisa tra i file sono le definizioni, tramite le intestazioni: link di dichiarazioni di funzioni (in file C) esternamente senza parole chiave di ambito. ( Le variabili globali sono già abbastanza gravi da sole: il loro collegamento in altri file esaspera il problema.)
Dovresti usare static
nella definizione (file C) di tutte le funzioni locali del file che non stai esponendo (tramite le intestazioni) ad altri file (omette la funzione dal collegamento esterno, mantenendo il namespace globale non inquinato) . (Puoi creare qualsiasi variabile globale in un file static
per gli stessi motivi, ma stai meglio non avendo le variabili globali.)
Come per namespacing, la tua libreria dovrebbe concordare un prefisso comune per tutti i nomi di funzioni / macro / struct / costanti ( Lua utilizza lua_
per materiale di base dell'API ( LUA_
per costanti), luaL_
per elementi ausiliari e vari altri prefissi 'lua-plus-a-letter-and-underscore' per elementi interni).
Come per gli effettivi ambiti della funzione interiore come questo:
void example()
{
char* msg = "Hello world!";
msg[1]='a';
msg[3]='d';
{
FILE * fOutput;
fOutput = fopen ("out.txt","w");
if (fOutput)
{
fputs (msg,fOutput);
fclose (fOutput);
}
}
}
Personalmente li amo e sento che sono un'ottima soluzione per ANSI C "devono dichiarare tutte le variabili prima di qualsiasi altra dichiarazione", ma la maggior parte delle persone tende a mantenere i propri ambiti variabili nella root della funzione.