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 -pedantic
GCC 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ı"