เพื่อตอบคำถาม "คงหมายถึงสำเนาเพียงชุดเดียวของ VAL ถูกสร้างขึ้นในกรณีที่ส่วนหัวรวมอยู่ในไฟล์ต้นฉบับมากกว่าหนึ่งไฟล์" ...
NO VAL จะถูกกำหนดแยกกันเสมอในทุกไฟล์ที่มีส่วนหัว
มาตรฐานสำหรับ C และ C ++ ทำให้เกิดความแตกต่างในกรณีนี้
ใน C ตัวแปรที่กำหนดขอบเขตไฟล์จะอยู่ภายนอกตามค่าเริ่มต้น หากคุณใช้ C VAL จะเป็นแบบคงที่และ ANOTHER_VAL อยู่ภายนอก
โปรดทราบว่าผู้เชื่อมโยงสมัยใหม่อาจบ่นเกี่ยวกับ ANOTHER_VAL หากส่วนหัวรวมอยู่ในไฟล์ที่แตกต่างกัน (มีการกำหนดชื่อส่วนกลางเดียวกันสองครั้ง) และจะบ่นอย่างแน่นอนหาก ANOTHER_VAL เริ่มต้นด้วยค่าอื่นในไฟล์อื่น
ใน C ++ ตัวแปร file-scoped จะเป็นแบบคงที่โดยค่าเริ่มต้นหากเป็น const และ extern ตามค่าเริ่มต้นหากไม่ใช่ หากคุณใช้ C ++ ทั้ง VAL และ ANOTHER_VAL จะคงที่
คุณต้องคำนึงถึงความจริงที่ว่าตัวแปรทั้งสองถูกกำหนด const ตามหลักการแล้วคอมไพลเลอร์มักจะเลือกที่จะแทรกตัวแปรเหล่านี้และไม่รวมหน่วยเก็บข้อมูลใด ๆ ไว้ด้วย มีสาเหตุหลายประการที่สามารถจัดสรรพื้นที่เก็บข้อมูลได้ คนที่ฉันคิดได้ ...
- ตัวเลือกการดีบัก
- ที่อยู่ในไฟล์
- คอมไพเลอร์จัดสรรหน่วยเก็บข้อมูลเสมอ (ประเภท const ที่ซับซ้อนไม่สามารถอินไลน์ได้ง่ายดังนั้นจึงกลายเป็นกรณีพิเศษสำหรับประเภทพื้นฐาน)