Действительно ли main () запускает программу на C ++?

Раздел $ 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 () НЕ является запуском программы; на самом деле это конец этой программы!


РЕДАКТИРОВАТЬ:

Как вы определяете слово «начало»?

Это сводится к определению слова «начало» фраза «запуск программы» . Итак, как именно вы это определяете?

130
задан Cœur 8 October 2018 в 16:07
поделиться