Sự khác nhau giữa define và const trong C/C++ là gì?

Về mục đích sử dụng thì cả hai từ khóa này đều cùng chung chức năng đó là tạo một biến có giá trị không thể bị thay đổi

#include <iostream>
using namespace std;


#define MAX 100
// hoặc
//int const MAX = 100;


int main(){
    MAX = 2; // Sai, giá trị của biến không thể
             // bị thay đổi khi được khởi tạo bằng
             // #define hoặc từ khóa const
}

Nhưng chúng có hai sự khác nhau chính đó là:

  • Thứ nhất, #define được xem như là bộ xử lý trước, tức là giá trị giá trị của biến (macros) được định nghĩa bằng #define được thay thế bởi giá trị chúng ta đã khởi tạo, ví dụ ở trường hợp này với MAX = 100 trước khi trình biên dịch dùng nó. Điều này có nghĩa là giá trị 100 sẽ được sử dụng ngay trong chương trình mà không cần phải khởi tạo biến, cấp phát địa chỉ, …v.v. Còn từ khóa const thường đi kèm với các từ khóa chỉ kiểu dữ liệu như int, float, … cho nên nó được xem như là một biến và cần phải được khởi tạo, cấp phát địa chỉ cho biến, … và được sử dụng như biến bình thường như ép kiểu,… .
  • Thứ hai, #define có thể được sử dụng để tạo một biểu thức thay vì một biến, trong khi đó từ khóa const không thể làm được việc này.

Bạn có thể xem đoạn chương trình dưới đây

#include <iostream>
using namespace std;


#define TONG(x) (x)+(x)


int main(){
    int a = TONG(2);
    cout << a << endl; // a = 4
}

Theo mình hiểu là như vậy, có gì thắc mắc hay sai bạn nói mình biết nha.