#define là chỉ thị tiền xử lý (preprocessor directive). Khi định nghĩa macro bằng #define, nó được thay thế vào mã nguồn bằng giá trị của nó trước khi biên dịch. Vì vậy, khi trình biên dịch chưa biết gì về mã, giá trị macro đã được thay thế.
Hằng số (const) thực chất là một biến. Khi khai báo, nó chiếm đơn vị bộ nhớ. Nhưng không thể cập nhật giá trị biến hằng trực tiếp. Có thể thay đổi nó thông qua con trỏ.
Lập trình viên đôi khi nghĩ dùng macro tốt hơn const vì không tốn thêm không gian bộ nhớ, nhưng với các trình biên dịch tối ưu tốt, mã tối ưu sẽ không bị ảnh hưởng. Chúng khá tương đồng.