La sezione $ 3.6.1 / 1 dello standard C ++ recita,
Un programma deve contenere una funzione globale chiamata main , che è l' inizio designato del programma.
Ora considera questo codice,
int square(int i) { return i*i; }
int user_main()
{
for ( int i = 0 ; i < 10 ; ++i )
std::cout << square(i) << endl;
return 0;
}
int main_ret= user_main();
int main()
{
return main_ret;
}
Questo codice di esempio fa quello che intendo fare, ovvero stampare il quadrato di numeri interi da 0 a 9, prima di entrare nella main()
funzione che dovrebbe essere "l'avvio" del programma.
L'ho anche compilato con l' -pedantic
opzione, GCC 4.5.0. Non dà alcun errore, nemmeno un avvertimento!
Quindi la mia domanda è
Questo codice è davvero conforme allo standard?
Se è conforme allo standard, non invalida ciò che dice lo standard? main()
non è l'inizio di questo programma! user_main()
eseguito prima del main()
.
Capisco che per inizializzare la variabile globale main_ret
, use_main()
viene eseguita prima ma questa è una cosa completamente diversa; il punto è che, non inficia la dichiarazione citata $ 3.6.1 / 1 dalla standard, come main()
non è l' inizio del programma; è in effetti la fine di questo programma!
MODIFICARE:
Come si definisce la parola "inizio"?
Si riduce alla definizione della frase "inizio del programma" . Quindi, come lo definisci esattamente?
main()
come "inizio del programma"