main
ต้องประกาศฟังก์ชันนี้เป็นฟังก์ชันที่ไม่ใช่สมาชิกในเนมสเปซส่วนกลาง ซึ่งหมายความว่ามันไม่สามารถเป็นฟังก์ชันสมาชิกแบบคงที่หรือไม่คงที่ของคลาสและไม่สามารถวางในเนมสเปซ (แม้แต่เนมสเปซที่ไม่มีชื่อ)
ชื่อmain
ไม่ได้ถูกสงวนไว้ใน C ++ ยกเว้นเป็นฟังก์ชันในเนมสเปซส่วนกลาง คุณสามารถประกาศเอนทิตีอื่น ๆ ที่มีชื่อmain
รวมถึงสิ่งอื่น ๆ คลาสตัวแปรการแจกแจงฟังก์ชันสมาชิกและฟังก์ชันที่ไม่ใช่สมาชิกไม่ได้อยู่ในเนมสเปซส่วนกลาง
คุณสามารถประกาศฟังก์ชั่นที่ชื่อว่าmain
เป็นฟังก์ชั่นสมาชิกหรือในเนมสเปซ แต่ฟังก์ชั่นดังกล่าวจะไม่เป็นmain
ฟังก์ชั่นที่กำหนดว่าโปรแกรมจะเริ่มต้นที่ใด
main
ฟังก์ชั่นไม่สามารถประกาศเป็นหรือstatic
inline
มันไม่สามารถรับได้มากเกินไป สามารถมีฟังก์ชันได้เพียงชื่อเดียวmain
ในเนมสเปซส่วนกลาง
main
ฟังก์ชั่นนี้ไม่สามารถใช้ในโปรแกรมของคุณ: คุณไม่ได้รับอนุญาตให้เรียกmain
ฟังก์ชั่นได้จากทุกที่ในรหัสของคุณหรือคุณได้รับอนุญาตให้ใช้ที่อยู่ของ
ประเภทการกลับมาของmain
int
ต้อง ไม่อนุญาตให้ใช้ชนิดส่งคืนอื่น ๆ (กฎนี้เป็นตัวหนาเนื่องจากเป็นเรื่องปกติมากที่จะเห็นโปรแกรมที่ไม่ถูกต้องที่ประกาศ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