Bagian $ 3.6.1 / 1 dari C ++ Standard berbunyi,
Suatu program harus mengandung fungsi global yang disebut main , yang merupakan awal dari program yang ditunjuk .
Sekarang pertimbangkan kode ini,
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;
}
Kode contoh ini melakukan apa yang ingin saya lakukan, yaitu mencetak kuadrat dari 0 hingga 9, sebelum masuk ke main()
fungsi yang seharusnya menjadi "awal" dari program.
Saya juga mengkompilasinya dengan -pedantic
opsi, GCC 4.5.0. Tidak ada kesalahan, bahkan peringatan!
Jadi pertanyaan saya adalah,
Apakah kode ini benar-benar sesuai standar?
Jika itu sesuai standar, maka apakah itu tidak membatalkan apa yang dikatakan Standar? main()
belum memulai program ini! user_main()
dieksekusi sebelum main()
.
Saya mengerti bahwa untuk menginisialisasi variabel global main_ret
, use_main()
pertama-tama dijalankan tetapi itu adalah hal yang berbeda sama sekali; intinya adalah, itu tidak valid pernyataan dikutip $ 3.6.1 / 1 dari Standar, karena main()
BUKAN awal program; ini sebenarnya adalah akhir dari program ini !
EDIT:
Bagaimana Anda mendefinisikan kata 'mulai'?
Itu bermuara pada definisi frase "mulai dari program" . Jadi, bagaimana tepatnya Anda mendefinisikannya?
main()
sebagai "awal program"