The main
Fungsi harus dinyatakan sebagai fungsi non-anggota di namespace global. Ini berarti bahwa itu tidak bisa menjadi fungsi anggota statis atau non-statis kelas, juga tidak dapat ditempatkan di namespace (bahkan namespace yang tidak disebutkan namanya).
Nama main
tidak dicadangkan di C ++ kecuali sebagai fungsi di namespace global. Anda bebas untuk mendeklarasikan entitas lain yang dinamai main
, termasuk di antaranya, kelas, variabel, enumerasi, fungsi anggota, dan fungsi non-anggota yang tidak ada dalam ruang nama global.
Anda bisa mendeklarasikan fungsi yang dinamai main
sebagai fungsi anggota atau dalam namespace, tetapi fungsi seperti itu tidak akan menjadi main
fungsi yang menentukan di mana program dimulai.
The main
Fungsi tidak dapat dinyatakan sebagai static
atau inline
. Itu juga tidak bisa kelebihan beban; hanya ada satu fungsi yang disebutkan main
dalam namespace global.
The main
Fungsi tidak dapat digunakan dalam program Anda: Anda tidak diizinkan untuk memanggil main
fungsi dari mana saja di kode Anda, atau apakah Anda diperbolehkan untuk mengambil alamat.
Jenis pengembalian main
harusint
. Tidak ada jenis pengembalian lain yang diizinkan (aturan ini dicetak tebal karena sangat umum untuk melihat program yang salah yang menyatakan main
dengan jenis pengembalian void
; ini mungkin aturan yang paling sering dilanggar mengenai main
fungsi).
Ada dua deklarasi main
yang harus diizinkan:
int main() // (1)
int main(int, char*[]) // (2)
Dalam (1) , tidak ada parameter.
Dalam (2) , ada dua parameter dan mereka secara konvensional dinamai argc
dan argv
, masing-masing. argv
adalah pointer ke array string C yang mewakili argumen ke program. argc
adalah jumlah argumen dalam argv
array.
Biasanya, argv[0]
berisi nama program, tetapi ini tidak selalu terjadi. argv[argc]
dijamin menjadi null pointer.
Perhatikan bahwa karena argumen tipe array (seperti char*[]
) benar-benar hanya argumen tipe pointer yang menyamar, dua berikut ini adalah cara yang benar untuk menulis (2) dan keduanya memiliki arti yang persis sama:
int main(int argc, char* argv[])
int main(int argc, char** argv)
Beberapa implementasi memungkinkan jenis dan jumlah parameter lainnya; Anda harus memeriksa dokumentasi implementasi Anda untuk melihat apa yang didukungnya.
main()
diharapkan mengembalikan nol untuk menunjukkan keberhasilan dan bukan nol untuk menunjukkan kegagalan. Anda tidak diharuskan untuk menulis return
pernyataan secara eksplisit di main()
: jika Anda membiarkan main()
kembali tanpa return
pernyataan eksplisit , itu sama seperti jika Anda telah menulis return 0;
. Dua main()
fungsi berikut memiliki perilaku yang sama:
int main() { }
int main() { return 0; }
Ada dua makro, EXIT_SUCCESS
dan EXIT_FAILURE
, yang didefinisikan dalam <cstdlib>
yang juga dapat dikembalikan dari main()
untuk menunjukkan keberhasilan dan kegagalan, masing-masing.
Nilai yang dikembalikan oleh main()
diteruskan ke exit()
fungsi, yang mengakhiri program.
Perhatikan bahwa semua ini hanya berlaku ketika kompilasi untuk lingkungan yang dihosting (secara informal, lingkungan di mana Anda memiliki perpustakaan standar penuh dan ada OS yang menjalankan program Anda). Dimungkinkan juga untuk mengkompilasi program C ++ untuk lingkungan yang berdiri sendiri (misalnya, beberapa jenis sistem tertanam), di mana startup dan terminasi sepenuhnya ditentukan oleh implementasi dan sebuah main()
fungsi bahkan mungkin tidak diperlukan. Jika Anda menulis C ++ untuk OS desktop modern, Anda mengkompilasi untuk lingkungan yang dihosting.
main
kembali dalam C dan C ++ .