В разделе $3.6.1/1 из стандарта С++ читается
Программа должна содержать глобальную функция main, которая является назначенный запуск программы.
Теперь рассмотрим этот код,
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;
}
Этот пример кода выполняет то, что я намереваюсь сделать, то есть печать квадрата целых чисел от 0 до 9, до, входящего в функцию main()
, которая должна быть "началом" программы.
Посмотрите на вывод здесь: http://www.ideone.com/Niy0R
Я также скомпилировал его с опцией -pedantic
, GCC 4.5.0. Это не дает никаких ошибок, даже не предупреждает!
Итак, мой вопрос:
Является ли этот код действительно стандартным?
Если это стандартное соответствие, то не делает ли это недействительным то, что говорит стандарт? main()
не является началом этой программы! user_main()
выполняется перед main()
.
Я понимаю, что для инициализации глобальной переменной main_ret
выполняется use_main()
, но это совсем другое; Дело в том, что делает недействительным цитируемый оператор $3.6.1/1 из Стандарта, поскольку main()
НЕ является началом программы; это действительно конец этой программы!
EDIT:
Как вы определяете слово "start"?
Это сводится к определению фразы "начало программы". Итак, как именно вы это определяете?