Pero' sono interessato particolarmente alla risposta di infinitejustice: perche' dici che le globali rendono il codice non portabile?
Perche quando delle funzioni sono legate ad una o piu globali, se vuoi riutilizzarle devi portarti dietro tutte le globali da cui dipendono, nonchè tutte le altre funzioni che non c'entrano niente ma che manipolano le globali (perche magari senza di loro il valore della globale nn è quello che dovrebbe).

Annulli cioè il concetto di indipendenza funzionale (suddividere un problema in tanti problemi piu piccoli, semplici ed indipendenti fra loro).

Pensa se tu avessi un tuo progetto con un tot di variabili globali e decidessi di acquistare o usare una libreria che al suo interno ha variabili globali con gli stessi nomi... se il tuo progetto è uno due file passi, se inizi ad avere un progettino importante...


Ti ritrovi inoltre oggetti che vivono per tutta la durata del programma e a cui tutti possono accedere. Devi quindi sempre tener sotto controllo chi fa cosa su chi.



E' buona regola (e se lo è ci sara un motivo ) limitare visibilita e durata delle variabili allo spazio dove queste servono davvero.

Es. in C++ nei cicli
for(int i; ...)

Generalmente in C c'è chi invece dichiara subito i e poi la utilizza per i piu svariati motivi per tutto il programma.


I problemi di cambio nel progetto all'ultimo momento non mi riguardano e se ce ne sono talmente drastici da ostacolarmi il codice, bhe riscrittura.
Nel mondo del lavoro ti picchiano se a due giorni dalla consegna riscrivi tutto. Perche riscrivere tutto vuol dire cattiva progettazione ed analisi dei requisiti...


Riguardo al runtime static initialization, onestamente ho qualche difficolta' a capire di cosa parli
Piu semplicemente, cosa succede se le globali nn possono essere inizializzate a tempo di compilazione ma solo run time ?