Tại: C++ FAQ - Miscellaneous technical issues - [39.6] What should be done with macros that need to paste two tokens together?Tại sao tôi cần hai lớp indirection cho macro?
Ai đó có thể giải thích cho tôi lý do tại sao? Tất cả tôi đọc là tin tưởng tôi, nhưng tôi chỉ đơn giản là không thể tin tưởng vào một cái gì đó bởi vì ai đó đã nói như vậy.
tôi đã cố gắng tiếp cận và tôi không thể tìm thấy bất kỳ lỗi xuất hiện:
#define mymacro(a) int a ## __LINE__
mymacro(prefix) = 5;
mymacro(__LINE__) = 5;
int test = prefix__LINE__*__LINE____LINE__; // fine
Vì vậy, tại sao sao tôi cần phải làm điều đó như thế này thay vì (trích dẫn từ các trang web):
Tuy nhiên, bạn cần một lớp kép của sự hướng dẫn khi bạn sử dụng ##. Về cơ bản bạn cần phải tạo một macro đặc biệt cho "dán thẻ" như :
#define NAME2(a,b) NAME2_HIDDEN(a,b) #define NAME2_HIDDEN(a,b) a ## b
ủy thác cho tôi về vấn đề này - bạn thực sự cần phải làm này! (Và xin vui lòng không ai viết cho tôi nói đôi khi nó hoạt động mà không lớp thứ hai về mình Hãy thử concatenating một biểu tượng với __ LINE__ và xem những gì sẽ xảy ra sau đó..)
Edit: thể một người nào đó cũng giải thích tại sao ông sử dụng NAME2_HIDDEN
trước khi được khai báo bên dưới? Có vẻ hợp lý hơn khi xác định macro NAME2_HIDDEN
trước khi tôi sử dụng. Có một số loại lừa ở đây không?
Tôi không chắc mình hiểu điều bạn đang yêu cầu ... –
Tôi thấy một chút không rõ ràng, tôi sẽ chỉnh sửa. – Rookie
@tenfour, xong. bạn có biết câu trả lời cho phần chỉnh sửa của tôi không? – Rookie