Раздел $ 3.6.1 / 1 стандарта C ++ гласит:
Программа должна содержать глобальную функцию с именем 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()
функцию, которая должна быть «запуском» программы.
Я также скомпилировал его с -pedantic
опцией GCC 4.5.0. Это не выдает ошибок, даже предупреждений!
Итак, мой вопрос:
Действительно ли этот код соответствует стандарту?
Если он соответствует стандарту, разве это не отменяет того, что говорит стандарт? main()
это не запуск этой программы! user_main()
выполнен до main()
.
Я понимаю , что для инициализации глобальную переменную main_ret
, в use_main()
сначала выполняется , но это совсем другое дело; Дело в том, что он делает недействительным цитируемый оператор $ 3.6.1 / 1 из Стандарта, поскольку main()
НЕ является началом программы; это фактически конец из этой программы!
РЕДАКТИРОВАТЬ:
Как вы определяете слово «старт»?
Все сводится к определению слова «запуск программы» . Так как именно вы это определяете?
main()
как «начало программы»