ในบทความนี้ เราจะทำความเข้าใจความแตกต่างระหว่าง inline และ macro ใน C++
Inline
- เป็นฟังก์ชันใน C++
- ถูกแยกวิเคราะห์โดยคอมไพเลอร์
- สามารถนิยามได้ทั้งภายในและภายนอกคลาส
- ประเมินค่าอาร์กิวเมนต์เพียงครั้งเดียว
- คอมไพเลอร์อาจไม่แปลงฟังก์ชันทั้งหมดเป็น inline และขยายทั้งหมด
- ฟังก์ชันสั้นที่นิยามภายในคลาสจะถูกทำให้เป็น inline functions อัตโนมัติ
- Inline function ภายในคลาสสามารถเข้าถึงสมาชิกข้อมูลของคลาสได้
- Inline function สามารถจบการทำงานด้วยเครื่องหมายวงเล็บปีกกา
- ง่ายต่อการ debug
- เนื่องจากตรวจสอบข้อผิดพลาดระหว่างการคอมไพล์
- ผูกมัดคำสั่งทั้งหมดในร่างกายของฟังก์ชัน
ตัวอย่าง
inline return_type funct_name ( parameters ) { . . . }
Macro
- ถูกขยายโดย preprocessor
- ถูกนิยามที่จุดเริ่มต้นของโปรแกรม
- ประเมินค่าอาร์กิวเมนต์ทุกครั้งที่ใช้ในโค้ด
- จะต้องถูกขยายเสมอ
- ต้องนิยามอย่างชัดเจน
- จะไม่กลายเป็นสมาชิกของคลาสเลย
- ไม่สามารถเข้าถึงสมาชิกข้อมูลของคลาสได้
- การนิยาม macro จบด้วยบรรทัดใหม่
- ยากต่อการ debug macro เนื่องจากไม่มีการตรวจสอบข้อผิดพลาดระหว่างคอมไพล์
- เกิดปัญหา binding หากมีมากกว่าหนึ่งคำสั่ง เนื่องจากไม่มีสัญลักษณ์สิ้นสุด
ตัวอย่าง
#define macro_name char_sequence