8
เหตุใดมาโครตัวประมวลผลล่วงหน้าจึงชั่วร้ายและทางเลือกอื่นคืออะไร?
ฉันถามเรื่องนี้มาตลอด แต่ไม่เคยได้รับคำตอบที่ดีเลย ฉันคิดว่าโปรแกรมเมอร์เกือบทุกคนก่อนที่จะเขียน "Hello World" คนแรกเคยพบวลีเช่น "มาโครไม่ควรใช้", "มาโครเป็นสิ่งชั่วร้าย" และอื่น ๆ คำถามของฉันคือ: ทำไม? ด้วย C ++ 11 ใหม่มีทางเลือกใหม่หลังจากผ่านไปหลายปีหรือไม่? ส่วนที่ง่ายคือเกี่ยวกับมาโครเช่น#pragmaซึ่งเป็นแพลตฟอร์มเฉพาะและคอมไพเลอร์เฉพาะและส่วนใหญ่มักมีข้อบกพร่องร้ายแรงเช่น#pragma onceนี้เกิดข้อผิดพลาดได้ง่ายในสถานการณ์สำคัญอย่างน้อย 2 สถานการณ์: ชื่อเดียวกันในเส้นทางที่แตกต่างกันและด้วยการตั้งค่าเครือข่ายและระบบไฟล์บางอย่าง แต่โดยทั่วไปแล้วมาโครและทางเลือกอื่น ๆ ในการใช้งานล่ะ?