Tôi phải liên kết hai thư viện, nói A và B. Một số tệp phổ biến trong cả hai thư viện. Vì vậy, tôi khai báo các hàm trong thư viện A bên trong một không gian tên, nói abc. Vì vậy, trong A và B, một hàm func trông giống như dưới đây:C++: Các hàm bên ngoài C bên trong một không gian tên
[ in A]
namespace abc {
extern "C" void func();
}
[in B]
extern "C" void func();
Trong khi xây dựng dự án, trình biên dịch ném lỗi liên kết nói nhiều định nghĩa về chức năng Func. Không phải là hàm func trong A bên trong không gian tên hoặc có một số vấn đề với các hàm "C" bên ngoài. Nếu có, thì làm thế nào tôi có thể phân biệt cả hai?
Lưu ý, tuy nhiên, việc mang tên có thể không được tắt cho bộ tiền xử lý C. Trong Visual C++ 2010, giá trị của macro '__FUNCTION__' vẫn là số nhận dạng đủ điều kiện ngay cả trong' extern "C" ', ví dụ: "tên của bạn". Điều này sẽ rơi trên đôi chân của bạn khi gọi macro trong không gian tên sử dụng các macro được xác định trước như '__FUNCTION__',' __PRETTY_FUNCTION__' hoặc '__func__'. Trong trường hợp của tôi (xuất C stubs từ một DLL) nó đã làm ;-) –