Allora, vediamo di mettere un po' di chiarezza sugli standard del C. L'attuale standard del C è del 2011, ma credo che nessun compilatore abbia un supporto minimamente decente.. Quello che l'ha preceduto è del 1999 ed è stato molto sfortunato, con praticamente nessun compilatore che lo supporta completamente e molti che non lo supportano affatto. Lo standard più famoso e supportato è quello del 1989, il primo standard del C. In nessuno di questi standard è ammessa una scrittura del tipo
- Codice: Seleziona tutto
void main()
e prima di tali standard, la parola chiave void era tutt'altro che diffusa. Era un'estensione supportata da alcuni compilatori. Ma quando non si volevano restituire risultati, semplicemente non si scriveva il valore di ritorno e il compilatore lo interpretava come int. Quindi
- Codice: Seleziona tutto
main()
era permesso e diffuso nello standard del 1989 e nei codici precedenti ed era del tutto equivalente a
- Codice: Seleziona tutto
int main()
Nei nuovi standard non è più permesso in quanto int non è più considerato il tipo di ritorno di default.
Esistono alcuni compilatori che permettono void come valore di ritorno del main, ma è un'estensione del linguaggio e non è un comportanto standard. Alcuni compilatori richiedono poi che il tipo di ritorno sia void, ma si tratta di compilatori per sistemi particolari, molto distanti dai sistemi mainstream a cui siamo abituato e in praticamente tutti non esiste un sistema operativo al quale tornare e il programma non viene in pratica mai terminato (non si esce insomma mai dal main in questi sistemi).
Per gli standard più recenti sono ammesse solo le seguenti versioni di main (o equivalenti):
- Codice: Seleziona tutto
int main(void)
int main(int argc, int **argv)
Per quanto riguarda l'inizializzazione degli array il discorso è un po' più complicato. Se l'array ha "static storage duration" (esiste insomma per tutta la durata dell'applicazione) e non viene inizializzato, allora è automaticamente inizializzato con tutti zero. Se viene inizializzato solo in parte, allora il resto viene inizializzato come nel caso precedente con tutti zero. Per cui la riga
- Codice: Seleziona tutto
int a[3] = {1};
inizializza l'array con {1, 0, 0}.
Per cui tutti i codici che avete scritto in pratica dovrebbero funzionare per azzerare l'array.