2
จะกำหนดไฟล์ส่วนหัวที่จะรวมได้อย่างไร?
สมมติว่าฉันมีรหัสด้านล่าง (ง่ายมาก) #include <iostream> int main() { std::cout << std::stoi("12"); } สิ่งนี้รวบรวมได้ดีทั้ง g ++ และ clang; อย่างไรก็ตามมันไม่สามารถคอมไพล์บน MSVC ด้วยข้อผิดพลาดต่อไปนี้: ข้อผิดพลาด C2039: 'stoi': ไม่ใช่สมาชิกของ 'std' ข้อผิดพลาด C3861: 'stoi': ไม่พบตัวระบุ ฉันรู้ว่าstd::stoiมันเป็นส่วนหนึ่งของ<string>ส่วนหัวซึ่งน่าจะเป็นสิ่งที่คอมไพเลอร์อดีตสองคนรวมอยู่ในส่วนของ<iostream>และส่วนหลังไม่ได้ ตามมาตรฐาน C ++ [res.on.headers] ส่วนหัว C ++ อาจรวมส่วนหัว C ++ อื่น ๆ ซึ่งสำหรับฉันแล้วโดยทั่วไปบอกว่าคอมไพเลอร์ทั้งสามนั้นถูกต้อง ปัญหานี้เกิดขึ้นเมื่อนักเรียนคนหนึ่งของฉันส่งงานซึ่ง TA ทำเครื่องหมายว่าไม่รวบรวม ฉันไปแล้วแน่นอน อย่างไรก็ตามฉันต้องการป้องกันเหตุการณ์ในอนาคตเช่นนี้ ดังนั้นมีวิธีการตรวจสอบไฟล์ส่วนหัวที่ควรจะรวมถึงการรวบรวมในสามคอมไพเลอร์ที่แตกต่างกันเพื่อตรวจสอบทุกครั้งหรือไม่ วิธีเดียวที่ฉันคิดได้ก็คือเพื่อให้แน่ใจว่าสำหรับstdการเรียกใช้ฟังก์ชันทุกครั้งจะมีการรวมที่เหมาะสม แต่ถ้าคุณมีรหัสที่มีอยู่ซึ่งมีความยาวหลายพันบรรทัดการค้นหาอาจน่าเบื่อ …
13
c++