Consigli di orientamento durante lo sviluppo in C

5

Durante lo sviluppo di una libreria con C, quali sono le tue raccomandazioni in materia di scope variabili e funzioni?

In C ++, OOP e namespace hanno reso tutto molto più semplice. Ma come farlo con la semplice C? In particolare come utilizzare le parole chiave static e extern nelle intestazioni e nei file di codice per gestire l'ambito?

    
posta Gulshan 30.05.2011 - 08:23
fonte

1 risposta

13

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.

    
risposta data 30.05.2011 - 08:41
fonte

Leggi altre domande sui tag