Certo che sono libero, come chiunque e' libero di dire corbellerie
Allora andiamo nel dettaglio:
1) referenzia BENE lo standard: mi serve un link dove posso leggere anche quello che c'e' attorno
2) certi consigli li puoi dare, motivandoli con l'opportuno riferimento, ad uno esperto
NON LI PUOI DARE
ad un neofita!
Il motivo DOVREBBE ESSERE OVVIO ANCHE A TE:
incasinare un INESPERTO con casi particolari NON HA SENSO!!!
in main(int argc, char** argv){ ... }
o se vuoi
int main(int argc, char** argv, char** env){ ... }
E' o NON E' una funzione?
E' una funzione che ritorna un intero!
Il fatto che LO POSSA O MENO ritornare, e' ININFLUENTE!
Quindi il codice DEVE terminare con
return <intero>;
ANCHE SE LO STANDARD DICE CHE per questo particolarissimo caso (il main), non serve!
Questo perche' PER QUALUNQUE ALTRA FUNZIONE si deve seguire questo particolare paradigma:
- ha un tipo di ritorno? DEVE ritornare un valore coerente
- e' di tipo VOID? NON DEVE ritornare niente!
Ma andiamo piu' nel dettaglio!
Perche' SE l'applicazione termina ma non passa per un return dovrebbe ritornare 0?
1) il sistema operativo NON PUO' SAPERE se l'applicazione e' o meno passata per un return, quindi NON PUO' essere lui (il SO) a decidere se il programma ritorna 0 oppure no
2) ma lo potrebbe sapere il compilatore, il quale, PER LA FUNZIONE "main" (ma a questo punto potrebbe farlo anche per altre funzioni) SA che deve generare un "return 0" la dove il flusso di esecuzione termina senza incontrare un return.
Altrimenti, FORNISCI TU una spiegazione valida!
Opportunamente motivata e bibliografata!
Aggiusto il tiro:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf
sezione 3.6.1 paragrafo 5 (pagina 62):
A return statement in main has the effect of leaving the main function (destroying any objects with automatic
storage duration) and calling std::exit with the return value as the argument. If control reaches the end
of main without encountering a return statement, the effect is that of executing
QUINDI e' il COMPILATORE che implementa un ulteriore
return std::exit(0);
alla fine del codice del main.
Direi che la cosa e' TALMENTE particolare, che non ha senso prenderla in considerazione.
Se ad un esame uno mi dovesse presentare un main senza return, a meno che non ci metta un commento grande come una casa sul PERCHE' non ha messo il return, lo rimando alla sessione d'esame successiva!
E continuiamo con le castronate:
ANCHE SE lo standard PREVEDE che nei prototipi si possa NON METTERE il nome del parametro
E' BUONA NORMA, PRATICA CONSOLIDATA, e' ALTAMENTE AUSPICABILE che uno ci metta il nome del parametro, PERCHE' AUTA A CAPIRE CHE COSA RAPPRESENTA quel parametro!
Se scrivi
void sleep(long);
in che unita' di misura temporale si deve indicare il tempo di sleep?
Uno deve andare a spluciare la documentazione (SE ESISTE !)
Se scrivi
voi sleep(long millis);
Lo capisce anche un testone quale e' l'unita di misura.
Gia' si commenta poco il codice, ed i giovinastri scrivono codice orrendo/orrido/orripilante
SE POI DAI ANCHE CONSIGLI DI CATTIVA PROGRAMMAZIONE,
non ne usciamo piu' !!!!