Originariamente inviato da xnavigator
thx...

la mia soluzione da ebete era quella giusta....

che linguaggio oooold
Il concetto di fondo è questo: il C è un linguaggio che non di dà nulla di default per consentire un'implementazione semplice del compilatore sulle piattaforme più disparate e per ottenere performance vicine a quelle di codice assembly scritto a mano. Per questo motivo è quasi una scelta obbligata per scrivere sistemi operativi, device driver, DBMS, motori grafici, applicazioni per manipolare video, librerie matematiche, applicazioni per dispositivi portabili ed in qualunque altro ambito in cui le performance siano fondamentali. Questo non significa che tu non possa ottenere feature avanzate, ad esempio strutture dati analoghe agli array PHP, ma te li devi implementare da zero o impiegare una libreria di terze parti; in ogni caso il C, non supportando classi, template e altre funzionalità OOP, rende più complessa l'implementazione e l'utilizzo di strutture dati di questo genere (almeno in termini di eleganza e comodità d'uso del codice). Per questo io preferisco di gran lunga il C++, che mantiene l'impostazione del C (non ti viene dato niente di complesso a meno che tu non lo richieda esplicitamente), la sua sintassi di base e la sua libreria, ma le cui caratteristiche avanzate consentono l'utilizzo di tecniche di programmazioni più moderne, come l'OOP, la programmazione generica e, con qualche trucco, molti altri paradigmi di programmazione.
Il punto quindi è che volendo in C++ puoi ottenere funzionalità analoghe al PHP (come gli array associativi), ma non ti vengono imposte, consentendoti così di scegliere autonomamente il contenitore dati più adeguato per la situazione: se mi serve un semplice array di dimensioni fisse perché scomodare un container associativo, con tutte le penalità in termini di prestazioni che mi impone? Se tutti i programmi che usi fossero scritti con linguaggi meno "old", per cui ogni array è in realtà una map, stai sicuro che il tuo computer sarebbe molto più lento...
Infine, devi sempre tenere conto di una cosa fondamentale quando confronti C/C++ e altri linguaggi compilati con linguaggi interpretati come il PHP: i linguaggi interpretati hanno, per la loro stessa natura, una "coscienza" di sé a runtime, visto che il codice sorgente è disponibile nel momento in cui il programma viene eseguito. Tutto questo non è vero nel caso dei linguaggi compilati, che, nel momento in cui vengono compilati diventano semplice codice eseguibile per la CPU, e ipso facto perdono coscienza di cosa di loro sia codice, cosa sia una variabile, di che tipo siano le variabili, eccetera, visto che, per eseguire il programma, questo non è necessario. In alcuni ambiti una maggiore "coscienza" di sé da parte del programma è desiderabile, ed è il motivo per cui il C++ introduce RTTI, ma, ribadisco, è un di più, e in tutti i compilatori che conosco è disattivabile per diminuire le dimensioni dell'eseguibile finale (visto che questa maggiore "coscienza" si paga con una quantità non indifferente di metadati da portarsi dietro).
ora per curiosità se non si può prevedere quale valore potrebbe assumere durante l'esecuzione e quindi settarlo come default nella dichiarazione come si fa a sapere se è stato valorizzato o no dopo un certo codice?
Non si può prevedere il valore di una variabile prima che sia inizializzata. Dopo essere stata inizializzata il suo valore resta quello.