mainต้องประกาศฟังก์ชันนี้เป็นฟังก์ชันที่ไม่ใช่สมาชิกในเนมสเปซส่วนกลาง ซึ่งหมายความว่ามันไม่สามารถเป็นฟังก์ชันสมาชิกแบบคงที่หรือไม่คงที่ของคลาสและไม่สามารถวางในเนมสเปซ (แม้แต่เนมสเปซที่ไม่มีชื่อ)
ชื่อmainไม่ได้ถูกสงวนไว้ใน C ++ ยกเว้นเป็นฟังก์ชันในเนมสเปซส่วนกลาง คุณสามารถประกาศเอนทิตีอื่น ๆ ที่มีชื่อmainรวมถึงสิ่งอื่น ๆ คลาสตัวแปรการแจกแจงฟังก์ชันสมาชิกและฟังก์ชันที่ไม่ใช่สมาชิกไม่ได้อยู่ในเนมสเปซส่วนกลาง
คุณสามารถประกาศฟังก์ชั่นที่ชื่อว่าmainเป็นฟังก์ชั่นสมาชิกหรือในเนมสเปซ แต่ฟังก์ชั่นดังกล่าวจะไม่เป็นmainฟังก์ชั่นที่กำหนดว่าโปรแกรมจะเริ่มต้นที่ใด
mainฟังก์ชั่นไม่สามารถประกาศเป็นหรือstatic inlineมันไม่สามารถรับได้มากเกินไป สามารถมีฟังก์ชันได้เพียงชื่อเดียวmainในเนมสเปซส่วนกลาง
mainฟังก์ชั่นนี้ไม่สามารถใช้ในโปรแกรมของคุณ: คุณไม่ได้รับอนุญาตให้เรียกmainฟังก์ชั่นได้จากทุกที่ในรหัสของคุณหรือคุณได้รับอนุญาตให้ใช้ที่อยู่ของ
ประเภทการกลับมาของmainintต้อง ไม่อนุญาตให้ใช้ชนิดส่งคืนอื่น ๆ (กฎนี้เป็นตัวหนาเนื่องจากเป็นเรื่องปกติมากที่จะเห็นโปรแกรมที่ไม่ถูกต้องที่ประกาศmainด้วยชนิดส่งคืนvoidซึ่งอาจเป็นกฎที่ละเมิดบ่อยที่สุดเกี่ยวกับmainฟังก์ชัน)
ต้องมีการประกาศสองรายการmainที่ต้องได้รับอนุญาต:
int main() // (1)
int main(int, char*[]) // (2)
ใน(1)ไม่มีพารามิเตอร์
ใน(2)มีสองพารามิเตอร์และพวกเขาจะตั้งชื่อตามอัตภาพargcและargvตามลำดับ argvเป็นตัวชี้ไปยังอาร์เรย์ของสตริง C ซึ่งแทนอาร์กิวเมนต์ของโปรแกรม argcคือจำนวนอาร์กิวเมนต์ในargvอาร์เรย์
โดยปกติแล้วจะargv[0]มีชื่อของโปรแกรม แต่นี่ไม่ใช่กรณี argv[argc]รับประกันว่าจะเป็นตัวชี้โมฆะ
โปรดทราบว่าเนื่องจากอาร์กิวเมนต์ประเภทอาเรย์ (เหมือนchar*[]) เป็นเพียงอาร์กิวเมนต์ประเภทพอยน์เตอร์ในการปลอมตัวทั้งสองต่อไปนี้เป็นวิธีที่ถูกต้องในการเขียน(2)และพวกเขาทั้งสองมีความหมายเหมือนกันทั้งหมด:
int main(int argc, char* argv[])
int main(int argc, char** argv)
การใช้งานบางอย่างอาจอนุญาตประเภทและจำนวนพารามิเตอร์อื่น ๆ คุณต้องตรวจสอบเอกสารการติดตั้งเพื่อดูว่ารองรับอะไรบ้าง
main()คาดว่าจะคืนค่าศูนย์เพื่อระบุความสำเร็จและไม่เป็นศูนย์เพื่อระบุความล้มเหลว คุณไม่จำเป็นต้องชัดเจนเขียนreturnคำสั่งในmain(): ถ้าคุณให้main()กลับมาโดยไม่ต้องชัดเจนคำสั่งก็เหมือนกันเช่นถ้าคุณได้เขียนreturn return 0;สองmain()ฟังก์ชันต่อไปนี้มีพฤติกรรมเหมือนกัน:
int main() { }
int main() { return 0; }
มีมาโครสองตัวEXIT_SUCCESSและEXIT_FAILUREกำหนดไว้ใน<cstdlib>ที่สามารถส่งคืนจากmain()เพื่อบ่งชี้ความสำเร็จและความล้มเหลวตามลำดับ
ค่าที่ส่งคืนโดยmain()ถูกส่งผ่านไปยังexit()ฟังก์ชันซึ่งจะยกเลิกโปรแกรม
โปรดทราบว่าทั้งหมดนี้ใช้เฉพาะเมื่อรวบรวมสำหรับสภาพแวดล้อมที่โฮสต์ (ไม่เป็นทางการซึ่งเป็นสภาพแวดล้อมที่คุณมีห้องสมุดมาตรฐานเต็มรูปแบบและมีระบบปฏิบัติการที่รันโปรแกรมของคุณ) นอกจากนี้ยังเป็นไปได้ที่จะรวบรวมโปรแกรม C ++ สำหรับสภาพแวดล้อมอิสระ (ตัวอย่างเช่นระบบฝังตัวบางประเภท) ซึ่งในกรณีนี้การเริ่มต้นและการเลิกจ้างจะถูกกำหนดโดยการนำไปปฏิบัติทั้งหมดและmain()อาจไม่จำเป็นต้องใช้ฟังก์ชั่น หากคุณกำลังเขียน C ++ สำหรับเดสก์ท็อประบบปฏิบัติการสมัยใหม่คุณกำลังรวบรวมสภาพแวดล้อมที่โฮสต์
mainกลับมาใน C และ C