2009-08-18 9 views

risposta

36

Sì - lo standard C ISO/IEC 9899:1999 anche noto come C99 (e C++) norme dicono che questo deve essere così. Vedere il punto 10 nella sezione 6.7.8 ("Inizializzazione") di WG14 N1256 per il testo esatto.

Come altri hanno fatto notare, è buona norma per inizializzare sempre variabili statiche:

static int idx = 0; 

Il motivo per fare questo non è perché alcuni compilatore potrebbe non sempre inizializzare le variabili statiche a zero (qualsiasi compilatore che non è riuscita fare un'inizializzazione di questo tipo sarebbe terminato in modo anomalo e non potrebbe essere considerato un compilatore C o C++), è dire cosa vuoi dire - probabilmente la regola base della programmazione.

+1

Quindi di nuovo ... l'argomento contro le variabili statiche esplicitamente azzerate all'inizializzazione è che espande la dimensione dell'eseguibile, perché non vivranno più in .bss. – ephemient

+4

Non vedo perché dovrebbe essere così. Il compilatore può facilmente ignorare le inizializzazioni zero esplicite. –

+3

Dettaglio di implementazione. GCC 4.2 e MSVC 7.1 sembrano trattare 'static int a;' e 'static int a = 0;' equivalentemente. Ricordo i compilatori che non lo facevano, ma non sembra che ne abbiano a disposizione abbastanza vecchi ... – ephemient

3

Mentre gli standard dicono di sì ... La buona pratica indica che è necessario variabili di inizializzazione. Non si sa mai quando si modifica il compilatore o si deve compilarlo su un'altra macchina, si desidera minimizzare qualsiasi potenziale di comportamento imprevisto.

+5

E rende anche chiaro agli sviluppatori futuri che è necessario che il valore sia zero. – Edd

+0

@Edd, che funziona. – AAA

+5

double somethingImportant() { static double arr [1024 * 1024]; ... } L'inizializzazione esplicita di ogni membro potrebbe essere un po 'difficile. Se hai un compilatore standard, viene inizializzato per definizione. Se non puoi fare affidamento su qualcosa di base come quello che funziona sul tuo compilatore, prendi un altro compilatore perché avrai un tempo difficile per ragionare su qualsiasi codice. –

Problemi correlati