#define เป็น Preprocessor Directive เมื่อนิยาม macro ด้วย #define มันจะถูกแทนที่ด้วยค่าก่อนการคอมไพล์ ดังนั้นคอมไพเลอร์จึงไม่ได้เห็น macro เป็นตัวแปร
const เป็นตัวแปรจริง การประกาศจะใช้หน่วยความจำ แต่ไม่สามารถเปลี่ยนค่าได้โดยตรง (สามารถเปลี่ยนผ่านพอยน์เตอร์ได้)
บางโปรแกรมเมอร์คิดว่า macro ดีกว่าเพราะไม่ใช้หน่วยความจำเพิ่มเติม แต่คอมไพเลอร์ที่ดีและมีการเพิ่มประสิทธิภาพ (optimization) จะทำให้ผลลัพธ์คล้ายกันมาก