Trong C/C++, tên biến có chữ cái, số và gạch dưới (_). Có từ khóa, ngoài ra mọi thứ coi là identifier (định danh). Identifier là tên biến, hằng, hàm...
Không thể đặt identifier bắt đầu bằng số vì có 7 giai đoạn trình biên dịch:
- Phân tích từ vựng (Lexical Analysis)
- Phân tích cú pháp (Syntax Analysis)
- Phân tích ngữ nghĩa (Semantic Analysis)
- Sinh mã trung gian (Intermediate Code Generation)
- Tối ưu mã (Code Optimization)
- Sinh mã (Code Generation)
- Bảng ký hiệu (Symbol Table)
Không giai đoạn nào hỗ trợ biến bắt đầu bằng số. Vì trình biên dịch nhầm lẫn số hay identifier cho đến khi gặp chữ cái sau số. Compiler phải backtrack về lexical analysis - không hỗ trợ. Trình biên dịch phải xác định token là identifier hay literal sau khi xem ký tự đầu.
Ví dụ khai báo biến C:
Ví dụ
#include <stdio.h>
int main() {
int 5s = 8;
int _4a = 3;
int b = 12;
printf("Giá trị biến 5s: %d", 5s);
printf("Giá trị biến _4a: %d", _4a);
printf("\nGiá trị biến b: %d", b);
return 0;
}Chương trình lỗi "invalid suffix 's' on integer constant" vì biến bắt đầu bằng 5. Nếu bỏ dòng đó, chương trình chạy đúng.
Ví dụ chương trình mới:
Ví dụ
#include <stdio.h>
int main() {
int _4a = 3;
int b = 12;
printf("Giá trị biến _4a: %d", _4a);
printf("\nGiá trị biến b: %d", b);
return 0;
}Kết quả
Đầu ra chương trình:
Giá trị biến _4a: 3 Giá trị biến b: 12