ฉันต้องการเพิ่มคำตอบที่ได้รับแล้วโดยอ้างอิงมาตรฐานภาษาจริง
เป็น 'int main; โปรแกรม C ที่ถูกต้อง?
คำตอบสั้น ๆ (ความคิดเห็นของฉัน): เฉพาะในกรณีที่การใช้งานของคุณใช้ "สภาพแวดล้อมการดำเนินการอิสระ"
คำพูดต่อไปนี้ทั้งหมดจากC11
5. สิ่งแวดล้อม
การใช้งานจะแปลไฟล์ต้นฉบับ C และเรียกใช้โปรแกรม Cในสภาพแวดล้อมระบบประมวลผลข้อมูลสองระบบซึ่งจะเรียกว่าสภาพแวดล้อมการแปลและสภาพแวดล้อมการดำเนินการ [... ]
5.1.2 สภาพแวดล้อมการดำเนินการ
มีการกำหนดสภาพแวดล้อมการดำเนินการสองแบบ: อิสระและโฮสต์ ในทั้งสองกรณีการเริ่มต้นโปรแกรมจะเกิดขึ้นเมื่อฟังก์ชัน C ที่กำหนดถูกเรียกใช้โดยสภาพแวดล้อมการดำเนินการ
5.1.2.1 สภาพแวดล้อมอิสระ
ในสภาพแวดล้อมอิสระ (ซึ่งการเรียกใช้โปรแกรม C อาจเกิดขึ้นโดยไม่ได้รับประโยชน์จากระบบปฏิบัติการ) ชื่อและประเภทของฟังก์ชันที่เรียกเมื่อเริ่มต้นโปรแกรมจะถูกกำหนดโดยการนำไปใช้งาน
5.1.2.2 สภาพแวดล้อมที่โฮสต์
ไม่จำเป็นต้องจัดเตรียมสภาพแวดล้อมที่โฮสต์ แต่จะต้องเป็นไปตามข้อกำหนดต่อไปนี้หากมี
5.1.2.2.1 การเริ่มต้นโปรแกรม
ฟังก์ชั่นที่เรียกว่าโปรแกรมที่เริ่มต้นเป็นชื่อหลัก [... ] มันจะถูกกำหนดด้วยประเภทผลตอบแทนของ int และไม่มีพารามิเตอร์ [... ] หรือด้วยพารามิเตอร์สองตัว [... ] หรือเทียบเท่าหรือในลักษณะที่กำหนดการนำไปใช้งานอื่น ๆ
จากสิ่งเหล่านี้จะสังเกตเห็นสิ่งต่อไปนี้:
- โปรแกรม C11 สามารถมีสภาพแวดล้อมการดำเนินการที่เป็นอิสระหรือโฮสต์และถูกต้อง
- หากมีอิสระไม่จำเป็นต้องมีฟังก์ชันหลัก
- มิฉะนั้นจะต้องมีหนึ่งกับการกลับมาของหุบเขาประเภทint
ในสภาพแวดล้อมการดำเนินการอิสระฉันขอยืนยันว่าเป็นโปรแกรมที่ถูกต้องที่ไม่อนุญาตให้เริ่มต้นทำงานได้เนื่องจากไม่มีฟังก์ชันสำหรับสิ่งนั้นตามที่กำหนดใน 5.1.2 ในสภาพแวดล้อมการดำเนินการที่โฮสต์ในขณะที่โค้ดของคุณแนะนำอ็อบเจ็กต์ที่ชื่อmainแต่ก็ไม่สามารถให้ค่าตอบแทนได้ดังนั้นฉันจะยืนยันว่ามันไม่ใช่โปรแกรมที่ถูกต้องในแง่นี้แม้ว่าจะมีใครโต้แย้งได้เหมือนก่อนหน้านั้นหากโปรแกรมไม่ได้ หมายถึงการดำเนินการ (on อาจต้องการให้ข้อมูลเท่านั้น) จากนั้นก็ไม่อนุญาตให้ทำเช่นนั้น
เป็น 'int main; โปรแกรม C ++ ที่ถูกต้องหรือไม่
คำตอบสั้น ๆ (ความคิดเห็นของฉัน): เฉพาะในกรณีที่การใช้งานของคุณใช้ "สภาพแวดล้อมการดำเนินการอิสระ"
อ้างจากC ++ 14
3.6.1 ฟังก์ชันหลัก
โปรแกรมจะต้องมีฟังก์ชันโกลบอลที่เรียกว่า main ซึ่งเป็นจุดเริ่มต้นของโปรแกรมที่กำหนดไว้ มีการกำหนดการนำไปใช้งานว่าโปรแกรมในสภาพแวดล้อมอิสระจำเป็นต้องกำหนดฟังก์ชันหลักหรือไม่ [... ] มันจะมีประเภทผลตอบแทนเป็น int แต่มิฉะนั้นประเภทของมันถูกกำหนดให้ใช้งานได้ [... ] ชื่อหลักไม่ได้สงวนไว้เป็นอย่างอื่น
ที่นี่เมื่อเทียบกับมาตรฐาน C11 ข้อ จำกัด น้อยกว่าจะใช้กับสภาพแวดล้อมการดำเนินการอิสระเนื่องจากไม่มีการกล่าวถึงฟังก์ชันการเริ่มต้นเลยในขณะที่สำหรับสภาพแวดล้อมการดำเนินการที่โฮสต์กรณีนี้ค่อนข้างเหมือนกับ C11
อีกครั้งฉันขอยืนยันว่าสำหรับกรณีที่โฮสต์รหัสของคุณไม่ใช่โปรแกรม C ++ 14 ที่ถูกต้อง แต่ฉันแน่ใจว่าเป็นกรณีอิสระ
เนื่องจากคำตอบของฉันพิจารณาเฉพาะสภาพแวดล้อมการดำเนินการฉันคิดว่าคำตอบของ dasblinkenlicht เข้ามามีบทบาทในขณะที่การโกงชื่อที่เกิดขึ้นในสภาพแวดล้อมการแปลเกิดขึ้นล่วงหน้า ที่นี่ฉันไม่แน่ใจว่ามีการปฏิบัติตามคำพูดข้างต้นอย่างเคร่งครัด
gcc -std=c99 -pedantic ...