La sección $ 3.6.1 / 1 del Estándar C ++ dice:
Un programa contendrá una función global llamada main , que es el inicio designado del programa.
Ahora considere este código,
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;
}
Este código de muestra hace lo que pretendo que haga, es decir, imprimir el cuadrado de enteros de 0 a 9, antes de ingresar a la main()
función que se supone que es el "inicio" del programa.
También lo compilé con la -pedantic
opción, GCC 4.5.0. ¡No da ningún error, ni siquiera una advertencia!
Entonces mi pregunta es,
¿Es este código realmente conforme con el estándar?
Si es estándar, ¿no invalida lo que dice el estándar? main()
No es el inicio de este programa! user_main()
ejecutado antes de la main()
.
Entiendo que para inicializar la variable global main_ret
, use_main()
primero se ejecuta, pero eso es algo completamente diferente; el punto es que, que no invalida la declaración citada 3.6.1 $ / 1 de la norma, ya que main()
no es el inicio del programa; ¡De hecho es el final de este programa!
EDITAR:
¿Cómo define la palabra 'inicio'?
Se reduce a la definición de la frase "inicio del programa" . Entonces, ¿cómo lo define exactamente?
main()
como "inicio del programa"