Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Định danh định sẵn __func__ trong C


Đị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ụ

#include 
void 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ụ

#include 
int 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ụ

#include 
int __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ụ

#include 
void 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__).