คำถามเมตา เสนอว่า c++98 และ c++03 ควรทำคำพ้องความหมาย ผู้ถามคำถามติดตามด้วย การกำหนดค่าเริ่มต้นเป็นส่วนหนึ่งของมาตรฐาน C++98 หรือไม่ ถ้าไม่ เหตุใดจึงถูกเพิ่มเข้าไปในมาตรฐาน C++03 เป็นคำถามที่ดีเยี่ยมซึ่งทำให้กระจ่างเกี่ยวกับการเพิ่ม การกำหนดค่าเริ่มต้น ให้กับ C++03 พิจารณาคำถามนี้เพื่อติดตามผลในข้อหลัง
OP ยืนยันว่าคอมไพเลอร์สมัยใหม่ไม่ต้องแยกแยะความแตกต่างระหว่าง C++98 และ C++03 สิ่งนี้ทำให้ฉันประหลาดใจ เนื่องจากกลายเป็นกรณีของคอมไพเลอร์สมัยใหม่สามคน แม้ว่าคำถามนี้อาจเดือดถึง "RTFM" แต่การค้นหาของฉันไม่พบข้อสรุปใด ๆ
จีซีซี
หน้ามาตรฐาน:
มาตรฐาน ISO C++ ดั้งเดิมได้รับการเผยแพร่เป็นมาตรฐาน ISO (ISO/IEC 14882:1998) และแก้ไขเพิ่มเติมโดย Technical Corrigenda ที่เผยแพร่ในปี 2003 (ISO/IEC 14882:2003) มาตรฐานเหล่านี้เรียกว่า C++98 และ C++03 ตามลำดับ GCC ใช้ C++98 ส่วนใหญ่ (การส่งออกเป็นข้อยกเว้นที่น่าสังเกต) และการเปลี่ยนแปลงส่วนใหญ่ใน C++03 หากต้องการเลือกมาตรฐานนี้ใน GCC ให้ใช้หนึ่งในตัวเลือก -ansi, -std=c++98 หรือ -std=c++03; ...
นอกจากนี้ ตัวเลือกภาษาถิ่น หน้า พูดว่า:
ในโหมด C++ [ansi] เทียบเท่ากับ -std=c++98
และจัดกลุ่ม "c++98" และ "c++03" เข้าด้วยกัน:
มาตรฐาน ISO C++ ปี 1998 บวกกับ Corrigendum ทางเทคนิคปี 2003 และรายงานข้อบกพร่องเพิ่มเติมบางส่วน เช่นเดียวกับ -ansi สำหรับโค้ด C++
ดูเหมือนว่าจะบอกเป็นนัยว่าไม่มีวิธีเปิดโหมด เท่านั้น C++98
เสียงดังกราว
สิ่งเดียวที่ฉันพบสำหรับ Clang อยู่ที่คู่มือ โดยระบุไว้ใน คุณลักษณะภาษา C++:
เสียงดังกราวใช้มาตรฐาน C ++ 98 ทั้งหมดอย่างสมบูรณ์ ยกเว้นเทมเพลตที่ส่งออก (ซึ่งถูกลบใน C ++ 11) ...
โดยไม่มีการกล่าวถึง C++03 นอกจากนี้ยังระบุด้วยว่า:
เสียงดังกราวรองรับตัวเลือก -std ซึ่งเปลี่ยนสิ่งที่โหมดภาษาเสียงดังกราวใช้ โหมดที่รองรับสำหรับ C ได้แก่ c89, gnu89, c94, c99, gnu99, c11, gnu11 และนามแฝงต่างๆ สำหรับโหมดเหล่านั้น หากไม่มีการระบุตัวเลือก -std เสียงดังกราวจะใช้ค่าเริ่มต้นเป็นโหมด gnu11 คุณลักษณะ C99 และ C11 หลายอย่างได้รับการสนับสนุนในโหมดก่อนหน้านี้เป็นส่วนขยายที่สอดคล้อง โดยมีคำเตือน
นี่เป็นหลักสูตรสำหรับคอมไพเลอร์ C ของพวกเขา ฉันไม่พบเอกสารใดๆ เกี่ยวกับคอมไพเลอร์ C++ เช่น ตัวเลือกใดที่สามารถส่งผ่านไปยัง -std
ได้ ฉันแค่สันนิษฐานว่า Clang สะท้อนตัวเลือกภาษาถิ่นของ GCC (เช่น C ++ 03 ใช้ได้กับ Clang) แม้ว่าหากไม่มีข้อพิสูจน์ฉันก็ไม่สามารถสรุปได้อย่างแน่ชัด
เอ็มเอสวีซี
เท่าที่ฉันรู้ MSVC ไม่อนุญาตให้คุณเปลี่ยนมาตรฐานภาษาเหมือนที่ทั้งสองข้างบนทำ การค้นหา "C++98" บน MSDN ไม่แสดงผลอะไรเลย ดูเหมือนว่าพวกเขาจะใช้ C++98/C++11 เช่นตามที่ระบุไว้โดย สมุนไพรซัตเตอร์
คำถาม
แม้ว่าคำถามเหล่านี้จะฟังดูชัดเจน แต่คำถามเมตาทำให้ฉันรู้ว่า ไม่ ไม่ชัดเจนนัก
มีวิธีทำให้ GCC สอดคล้องกับ C ++ 98 เท่านั้นหรือไม่ การบังคับใช้มาตรฐาน C++98 ใน gcc เพียงลิงก์ไปยังเอกสารฉบับเดียวกัน I ทำโดยไม่ต้องพิจารณาเพิ่มเติมว่าสอดคล้องกับ C ++ 98 จริง ๆ หรือไม่
เสียงดังกราวเป็นไปตาม C ++ 98 หรือจริง ๆ แล้วสอดคล้องกับ C ++ 03 หรือไม่ ฉันจะหาเอกสารที่เกี่ยวข้องกับเรื่องนี้ได้ที่ไหน
เช่นเดียวกับ MSVC มีวิธีเปลี่ยนมาตรฐานภาษาใน MSVC ให้สอดคล้องกับ C ++ 98 เท่านั้นหรือไม่
-std=c++98
จะไม่มีประโยชน์เลยสำหรับโค้ดจริง มีเพียงคนโง่และผู้ที่เขียนชุดการตรวจสอบคอมไพเลอร์เท่านั้นที่จะใช้ C++03 แก้ไขข้อบกพร่องที่สำคัญมากมายใน C++98 มันจะทำให้ชีวิตของผู้เขียนคอมไพเลอร์ยากขึ้น เนื่องจากจะเพิ่มจำนวนการกำหนดค่าและโหมดที่ต้องทดสอบ อาจทำให้เกิดข้อบกพร่อง และโดยทั่วไปจะสร้างปัญหาให้กับผู้พัฒนาและผู้ใช้คอมไพเลอร์ ซึ่งไม่มีใครสนใจหรือใช้-std=c++98
ตัวเลือก - person Jonathan Wakely   schedule 08.12.2014