Possible Duplicate:
Creating C macro with ## and LINE (token concatenation with positioning macro)Tạo macro bằng __LINE__ cho tên biến khác nhau
Tôi cố gắng để sử dụng __LINE__
vĩ mô để tạo ra tên biến khác nhau. Tôi có một lớp tiêu chuẩn scoped gọi là Benchmark (nằm trong không gian tên utils) và constructor của nó có một chuỗi. Dưới đây là định nghĩa vĩ mô tôi đã tạo:
#define BENCHMARK_SCOPE utils::Benchmark bm##__LINE__(std::string(__FUNCTION__))
Đáng tiếc là điều này gây ra các lỗi sau:
<some_file_name>(59): error C2374: 'bm__LINE__' : redefinition; multiple initialization
Điều này dẫn tôi đến kết luận các __LINE__
macro không được mở rộng. Tôi đã tạo macross của tôi theo this post. Bạn có ý tưởng tại sao __LINE__
không được mở rộng?
EDIT: có thể thông tin trình biên dịch cũng có liên quan. Tôi đang sử dụng visual studio 2010.
Hmm. Bạn đã thử 'bm ## __LINE__' (với một khoảng trống) chưa? – Cameron
@Cameron Tôi đã cảm ơn nhận xét của bạn nhưng không có gì thay đổi. –
OK, thêm một lần nữa để thử: '#define _BENCHMARK_SCOPE (dòng) utils :: Benchmark bm ## line (...' với '#define BENCHMARK_SCOPE _BENCHMARK_SCOPE (__ LINE __)' – Cameron