Có nhiều cách để khai báo hằng số trong C và C++. Trước hết, cần hiểu khái niệm hằng số.
Hằng số là gì?
Hằng số là giá trị không thể thay đổi. Trong lập trình, hằng số là các giá trị cố định được gán cho biến sao cho chúng không thể bị thay đổi bởi bất kỳ biến hay thành phần nào trong quá trình thực thi chương trình. Hằng số có thể thuộc bất kỳ kiểu dữ liệu nào. Chúng được dùng để định nghĩa các thành phần không thay đổi của chương trình. Ví dụ: số Pi có giá trị cố định 3.14 nên có thể khai báo là hằng số.
Các cách khai báo biến hằng
1. Sử dụng từ khóa const
Cách phổ biến nhất. Nếu chương trình cố gắng thay đổi giá trị của biến const, trình biên dịch sẽ báo lỗi.
Ví dụ
#include <stdio.h>
int main() {
const int value = 5;
printf("Giá trị biến hằng: %d", value);
// Cố thay đổi giá trị - sẽ gây lỗi biên dịch
// value = 8;
return 0;
}
Kết quả lỗi
error: assignment of read-only variable 'value'
2. Sử dụng Enum (Enumeration)
Enum là kiểu dữ liệu do người dùng định nghĩa, dùng để tạo tập hợp các giá trị hằng. Ví dụ: định nghĩa các ngày trong tuần.
Ví dụ
#include <stdio.h>
enum months {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec};
int main() {
int i;
printf("Các giá trị: ");
for (i = Jan; i <= Dec; i++)
printf("%d ", i);
return 0;
}
Kết quả
Các giá trị: 0 1 2 3 4 5 6 7 8 9 10 11
3. Sử dụng Macro (#define)
Macro là chỉ thị tiền xử lý. Khi trình biên dịch gặp tên macro, nó thay thế bằng đoạn code tương ứng.
Ví dụ 1 - Macro không thể sửa đổi
#include <iostream>
using namespace std;
#define val 10
int main() {
// val++; // Lỗi: expression is not assignable
return 0;
}
Ví dụ 2 - Sử dụng macro trong tính toán
#include <iostream>
using namespace std;
#define val 10
int main() {
int product = 1;
cout << "Giá trị Macro val: " << val;
for(int i = 0; i < val; i++) {
product = product * val;
}
cout << "\nTích là: " << product;
cout << "\nGiá trị Macro val sau khi 'thay đổi': " << val;
return 0;
}
Kết quả
Giá trị Macro val: 10 Tích là: 1410065408 Giá trị Macro val sau khi 'thay đổi': 10
Lưu ý: Giá trị macro không thực sự thay đổi được, nó chỉ được thay thế văn bản tại thời điểm tiền xử lý.