Nền:Xử lý định nghĩa lại macro mà không sửa đổi các tệp .h ... Ngôn ngữ C/C++
Giả sử rằng tôi có hai tệp tiêu đề a.h và b.h.
a.h chứa:
#define VAR 1
b.h chứa:
#define VAR 2
Lưu ý: Tên của cả hai vĩ mô là như nhau. Giả sử tôi có một số tệp myFile.c bao gồm cả hai tệp tiêu đề, tức là a.h và b.h.
Khi tôi cố gắng truy cập VAR, tôi nhận được lỗi định nghĩa lại VAR.
Để giải quyết vấn đề này, tôi đã chèn câu lệnh #ifndef VAR vào cả tệp a.h và b.h để ngăn lỗi này. tập tin a.h trở thành
#ifndef VAR
#define VAR 1
#endif
tập tin b.h trở thành
#ifndef VAR
#define VAR 2
#endif
Lưu ý: Các file header có thể chứa nhiều macro, không chỉ là một vĩ mô.
Sự cố:
Giả sử rằng tệp a.h và b.h được lấy từ thư viện của bên thứ ba. Các tệp này không chứa câu lệnh #ifndef VAR.
Tôi không được phép thay đổi tệp tiêu đề của họ.
Tôi có thể giải quyết lỗi định nghĩa lại 'VAR' macro trong tệp myFile.c hoặc myFile.cpp sử dụng macro VAR không?
Tôi biết tôi #undef VAR có thể được sử dụng để xác định VAR macro. Làm thế nào tôi có thể chọn lọc bao gồm VAR sau này trong chương trình của tôi? tức là trên dòng 10 của mã myFile.c tôi có thể tham khảo định nghĩa VAR từ tệp ah, trên dòng 15 của mã của tôi, tôi có thể tham khảo VAR từ tệp bh và trên dòng 18 một lần nữa tôi có thể tham khảo đến VAR từ tập tin ah.
Tóm lại, tôi có thể thực hiện đa hình macro không? Với tên của tệp tiêu đề, nó nên tham chiếu đến định nghĩa macro có trong tệp đó.
Tôi đã nghĩ đến việc sử dụng mẹo không gian tên để giải quyết vấn đề. Xác định tập tin tiêu đề đầu tiên trong không gian tên tập tin đầu tiên và thứ hai trong không gian tên thứ hai.
Tôi đã thử xác định hai không gian tên. Không gian tên đầu tiên chứa #include a.h và không gian tên thứ hai chứa b.h. Tuy nhiên, thủ thuật không gian tên không hoạt động với macro. Khi tôi cố gắng truy cập firstns :: VAR, trình biên dịch báo cáo một thông báo lỗi.
Bạn có thể đề xuất một số cách không?
này không không trả lời OP eed để thay thế lẫn nhau sử dụng định nghĩa '' hoặc 'B' của' VAR'. – vladr