C ++ Standardının 3.6.1 / 1 dolarlık bölümünde,
Bir program, programın belirlenmiş başlangıcı olan main adlı genel bir işlevi içerecektir .
Şimdi bu kodu düşünün,
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;
}
Bu örnek kod , programın "başlangıcı" olması gereken işleve girmeden önce , 0'dan 9'a kadar olan tam sayıların karesini yazdırmak gibi, yapmayı planladığım şeyi yapar main().
Bunu ayrıca -pedanticGCC 4.5.0 seçeneği ile derledim . Hata yapmaz, uyarı bile vermez!
Yani sorum şu:
Bu kod gerçekten Standart uyumlu mu?
Standart uyumluysa, Standardın söylediği şeyi geçersiz kılmaz mı? main()bu programın başlangıcı değil! user_main()önce idam edildi main().
Küresel değişkeni başlatmak için main_retönce use_main()çalıştıranın ancak bunun tamamen farklı bir şey olduğunu anlıyorum ; nokta, yani yok gibi $ 3.6.1 / 1 Standard alıntı deyimi geçersiz main()DEĞİLDİR başlangıç programının; o aslında uç arasında bu programda!
DÜZENLE:
'Başlangıç' kelimesini nasıl tanımlarsınız?
Bu, "programın başlangıcı" ifadesinin tanımına indirgenir . Peki bunu tam olarak nasıl tanımlıyorsunuz?
main()da "programın başlangıcı"