Differenza tra l'inizializzazione di variabili statiche in C e C++

Differenza tra l'inizializzazione di variabili statiche in C e C++

Viene compilato in C++ perché C++ deve comunque supportare l'inizializzazione dinamica oppure non è possibile avere oggetti locali statici o non locali con costruttori non banali.

Quindi, poiché C++ ha comunque questa complessità, supportare quell'inizializzazione come mostri non è più complicato da aggiungere.

In C sarebbe un grosso problema perché C non ha nessun altro motivo per supportare l'inizializzazione eseguita all'avvio del programma (a parte la banale inizializzazione zero). In C, i valori iniziali dell'ambito del file o degli oggetti statici locali possono sempre essere inseriti staticamente nell'immagine eseguibile.


6.7.8/4 [C99]

In static int i = initializer(); RHS non è un'espressione costante e quindi il codice non viene compilato in C.

In C++ non esiste tale restrizione e il codice è ben formato in C++.


Le variabili statiche in C devono essere inizializzate con un valore noto in fase di compilazione. Questo requisito è stato rimosso in C++ ed è possibile inizializzarli con espressioni valutate in fase di esecuzione.

Le due lingue differiscono per questo, e per moltissimi altri aspetti. Puoi facilmente scrivere codice C che sarà accettabile per un compilatore C++, ma non è vero il contrario.