Розділ $ 3.6.1 / 1 із стандарту C ++ читає,
Програма повинна містити глобальну функцію, яку називають основною , яка позначається початком програми.
Тепер розглянемо цей код,
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()
як "початок програми"