Является ли main () действительно началом программы на C ++? - PullRequest
130 голосов
/ 24 января 2011

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


EDIT:

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

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

Ответы [ 11 ]

0 голосов
/ 24 января 2011

Да, main - это «точка входа» каждой программы на C ++, за исключением расширений для конкретной реализации.Несмотря на это, некоторые вещи происходят до main, особенно глобальная инициализация, например, main_ret.

...