Xáo trộn tên
Xáo trộn tên, còn được gọi là trang trí tên, là một kỹ thuật được trình biên dịch sử dụng để mã code hóa thông tin bổ sung về phạm vi, loại, liên kết hoặc thông tin nhận dạng khác của một mã code định danh (tên hàm, tên biến, v.v.) trong tên của nó. Mục đích chính của xáo trộn tên là để hỗ trợ nạp chồng hàm, cho phép nhiều hàm có cùng tên nhưng danh sách tham số khác nhau cùng tồn tại trong một chương trình.
Trong C++, trình biên dịch tạo ra một tên đọc sai cho mỗi hàm và biến dựa trên phạm vi và kiểu của chúng. Tên đọc sai thường được hình thành bằng cách ghép tên gốc, loại tham số và thông tin khác, thường sử dụng tiền tố hoặc hậu tố.
Ví dụ: giả sử bạn có hàm sau:
int add(int a, int b)
{
return a + b;
}
Trình biên dịch có thể tạo ra một tên đọc sai, chẳng hạn như _Z3addii, mã code hóa tên hàm add và hai tham số int của nó.
Các quy tắc chính xác cho việc xáo trộn tên phụ thuộc vào việc triển khai và nền tảng. Các trình biên dịch khác nhau có thể xáo trộn các tên khác nhau, điều này có thể dẫn đến sự không tương thích khi cố gắng liên kết các tệp đối tượng hoặc thư viện được biên dịch với các trình biên dịch khác nhau.
Một số công cụ, chẳng hạn như bộ lọc C++ (có trong GCC và Clang), có thể được sử dụng để tách tên bị đọc sai trở lại mã code định danh ban đầu, điều này có thể hữu ích khi gỡ lỗi hoặc làm việc với các bảng ký hiệu.
$ echo "_Z3addii" | c++filt
add(int, int)
Nói chung, bạn không cần phải hiểu chi tiết về xáo trộn tên khi viết mã code trong C++, vì trình biên dịch sẽ tự động xử lý việc này. Tuy nhiên, nó có thể ảnh hưởng đến hành vi của chương trình trong một số trường hợp, chẳng hạn như khi sử dụng các thư viện bên ngoài hoặc liên kết các tệp đối tượng từ các trình biên dịch khác nhau.