क्या कोई बता सकता है कि g ++ __FUNCTION__
'मैक्रो' को फ़ंक्शन नाम वाले स्ट्रिंग के साथ बदलता है? ऐसा लगता है कि यह नहीं की जगह ले सकता जब तक यह स्रोत कोड के वाक्य-शुद्धता की जांच की है, यानी निम्नलिखितg ++ __FUNCTION__ समय बदलना
#include <whatsneeded>
#define DBG_WHEREAMI __FUNCTION__ __FILE__ __LINE__
int main(int argc, char* argv)
{
printf(DBG_WHEREAMI "\n"); //*
}
के बाद से
काम नहीं करेगा स्रोत लग रहा है
g++ -E test.cc
का उपयोग कर preprocessing के बाद
की तरह[...]
int main(int argc, char* argv)
{
printf(__FUNCTION__ "test.cc" "6" "\n"); //*
}
और अब संकलक सही ढंग से फेंकता है क्योंकि * एड लाइन गलत है।
क्या स्ट्रिंग के साथ उस प्रतिस्थापन को पहले चरण में मजबूर करने का कोई तरीका है ताकि लाइन सही हो?
__FUNCTION__
वास्तव में एक स्ट्रिंग के साथ बदल दिया गया है? या यह संकलित कोड में एक चर है?
दुर्भाग्य से, इस तरह 'DBG_WHEREAMI (" त्रुटि कोड% d ", errorCode)' कुछ करने के लिए अनुमति नहीं है। इसे काम करने के लिए नहीं बनाया जा सकता है, या तो (कम से कम पोर्टेबल नहीं) क्योंकि सी ++ में (अभी तक) भिन्नता वाले मैक्रोज़ नहीं हैं। –
काफी नहीं ... मैं सोच रहा था कि क्या मैं संकलन समय पर __func__ युक्त स्ट्रिंग उत्पन्न कर सकता हूं ताकि रनटाइम स्थिर हो। जो असंभव प्रतीत होता है। – bbb
@bbb: यह 'स्थिर स्थिरांक 'है, और इसे रनटाइम पर उत्पन्न होने का शून्य मौका है। –