The mainFungsi 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 maintidak 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 mainsebagai fungsi anggota atau dalam namespace, tetapi fungsi seperti itu tidak akan menjadi mainfungsi yang menentukan di mana program dimulai.
The mainFungsi tidak dapat dinyatakan sebagai staticatau inline. Itu juga tidak bisa kelebihan beban; hanya ada satu fungsi yang disebutkan maindalam namespace global.
The mainFungsi tidak dapat digunakan dalam program Anda: Anda tidak diizinkan untuk memanggil mainfungsi dari mana saja di kode Anda, atau apakah Anda diperbolehkan untuk mengambil alamat.
Jenis pengembalian mainharusint . Tidak ada jenis pengembalian lain yang diizinkan (aturan ini dicetak tebal karena sangat umum untuk melihat program yang salah yang menyatakan maindengan jenis pengembalian void; ini mungkin aturan yang paling sering dilanggar mengenai mainfungsi).
Ada dua deklarasi mainyang 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 argcdan argv, masing-masing. argvadalah pointer ke array string C yang mewakili argumen ke program. argcadalah jumlah argumen dalam argvarray.
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 returnpernyataan secara eksplisit di main(): jika Anda membiarkan main()kembali tanpa returnpernyataan 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_SUCCESSdan 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.
mainkembali dalam C dan C ++ .