7
นิยามใหม่ของ NULL
ฉันกำลังเขียนรหัส C สำหรับระบบที่ที่อยู่ 0x0000 ถูกต้องและมีพอร์ต I / O ดังนั้นจุดบกพร่องที่เป็นไปได้ที่เข้าถึงตัวชี้ NULL จะยังคงตรวจไม่พบและในขณะเดียวกันก็ทำให้เกิดพฤติกรรมที่เป็นอันตราย ด้วยเหตุนี้ฉันจึงต้องการกำหนด NULL ใหม่ให้เป็นที่อยู่อื่นตัวอย่างเช่นที่อยู่ที่ไม่ถูกต้อง หากฉันเข้าถึงที่อยู่ดังกล่าวโดยบังเอิญฉันจะได้รับฮาร์ดแวร์ขัดจังหวะซึ่งฉันสามารถจัดการกับข้อผิดพลาดได้ ฉันมีสิทธิ์เข้าถึง stddef.h สำหรับคอมไพเลอร์นี้ดังนั้นฉันจึงสามารถเปลี่ยนส่วนหัวมาตรฐานและกำหนดค่า NULL ใหม่ได้ คำถามของฉันคือสิ่งนี้จะขัดแย้งกับมาตรฐาน C หรือไม่? เท่าที่ฉันสามารถบอกได้จาก 7.17 ในมาตรฐานมาโครถูกกำหนดให้ใช้งานได้ มีอะไรในมาตรฐานที่ระบุว่า NULL ต้องเป็น 0 หรือไม่? ปัญหาอีกประการหนึ่งคือคอมไพเลอร์จำนวนมากดำเนินการเริ่มต้นแบบคงที่โดยตั้งค่าทุกอย่างเป็นศูนย์ไม่ว่าจะเป็นประเภทข้อมูลก็ตาม แม้ว่ามาตรฐานจะบอกว่าคอมไพเลอร์ควรกำหนดจำนวนเต็มเป็นศูนย์และพอยน์เตอร์เป็น NULL ถ้าฉันจะกำหนด NULL ใหม่สำหรับคอมไพเลอร์ของฉันฉันก็รู้ว่าการเริ่มต้นแบบคงที่จะล้มเหลว ฉันสามารถพิจารณาว่าเป็นพฤติกรรมของคอมไพเลอร์ที่ไม่ถูกต้องแม้ว่าฉันจะแก้ไขส่วนหัวของคอมไพเลอร์ด้วยตนเองอย่างกล้าหาญ? เพราะฉันรู้แน่นอนว่าคอมไพเลอร์เฉพาะนี้ไม่เข้าถึงมาโคร NULL เมื่อทำการเริ่มต้นแบบคงที่