Định danh (Identifier) là tên gán cho thực thể trong lập trình để nhận diện trong chương trình.
Thường do lập trình viên tạo, nhưng có định danh định sẵn (predefined) như cout, cin.
Ở đây xem __func__ – một định danh định sẵn của C.
Định nghĩa chính thức: "Định danh __func__ được khai báo ngầm bởi trình dịch như thể, ngay sau dấu ngoặc mở của mỗi định nghĩa hàm, khai báo
static const char __func__[] = "function-name";
xuất hiện, trong đó function-name là tên hàm bao quanh về mặt từ vựng."
__func__ là định danh do trình biên dịch tạo để nhận diện hàm bằng tên hàm.
Xem ví dụ làm rõ:
Ví dụ
#includevoid function1 (void){ printf ("%s\n", __func__); } void function2 (void){ printf ("%s\n", __func__); function1 (); } int main (){ function2 (); return 0; }
Kết quả
function2 function1
Giải thích – __func__ trả về tên hàm nơi nó được gọi. Cả hai printf gọi __func__ cho hàm của chính nó.
Định danh này hoạt động cả với main.
Ví dụ
#includeint main (){ printf ("%s\n", __func__); return 0; }
Kết quả
main
Nhưng không thể ghi đè __func__ – dành riêng cho tên hàm. Dùng để lưu giá trị khác sẽ báo lỗi.
Ví dụ
#includeint __func__ = 123; int main (){ printf ("%s\n", __func__); return 0; }
Kết quả
error
Có các định danh tương tự: __FILE__ – tên file hiện tại. __LINE__ – số dòng hiện tại.
Ví dụ
#includevoid function1(){ printf("The function: %s is in line: %d of the file :%s\n", __func__, __LINE__, __FILE__); } int main(){ function1(); return 0; }
Kết quả
The function: function1 is in line: 3 of the file :main.c
Giải thích – các định danh hữu ích thu thập thông tin: tên file, dòng code, hàm đang gọi (__func__, __LINE__, __FILE__).