Possible Duplicate:
Creating C macro with ## and LINE (token concatenation with positioning macro)अलग चर नाम
के लिए __LINE__ का उपयोग कर मैक्रो बनाना मैं उपयोग करने के लिए __LINE__
मैक्रो विभिन्न चर नाम उत्पन्न करने के लिए कोशिश कर रहा हूँ। मेरे पास बेंचमार्क नामक एक स्कोप्ड बेंचमार्क क्लास है (यूटिल नेमस्पेस में स्थित है) और यह कन्स्ट्रक्टर स्ट्रिंग लेता है।
#define BENCHMARK_SCOPE utils::Benchmark bm##__LINE__(std::string(__FUNCTION__))
दुर्भाग्य से यह निम्न त्रुटि का कारण बनता है:
<some_file_name>(59): error C2374: 'bm__LINE__' : redefinition; multiple initialization
यह मैं इस निष्कर्ष __LINE__
मैक्रो का विस्तार नहीं हो की ओर जाता है यहाँ मैक्रो परिभाषा मैं बनाया है है। मैंने this post के अनुसार अपना मैक्रॉस बनाया है। क्या आपके पास विचार हैं कि __LINE__
क्यों विस्तारित नहीं होता है?
EDIT: शायद संकलक जानकारी भी रिलीज़ होती है। मैं दृश्य स्टूडियो 2010
हम्म। क्या आपने 'बीएम ## __LINE__' (एक स्पेस के साथ) की कोशिश की है? – Cameron
@ कैमरॉन मैंने आपकी टिप्पणी का धन्यवाद किया लेकिन कुछ भी नहीं बदला है। –
ठीक है, कोशिश करने के लिए एक और हैक: '# परिभाषित करें _BENCHMARK_SCOPE (लाइन) utils :: बेंचमार्क बीएम ## लाइन (...' '# परिभाषित करें BENCHMARK_SCOPE _BENCHMARK_SCOPE (__ LINE __)' – Cameron