दिलचस्प पोस्ट
एल्विस-ऑपरेटर के साथ दो तरह से बाध्यकारी C # में एक स्ट्रिंग से फ़ंक्शन कॉल करना इनपुट के लिए समय सीमा MySQL में तालिका या स्तंभ नाम के रूप में एक आरक्षित शब्द का उपयोग करने के कारण सिंटैक्स त्रुटि मुझे es6 एरो फ़ंक्शंस में `वापसी` का उपयोग कब करना चाहिए? सी # में टेम्पलेट विशेषज्ञता कैसे करें अंकगणितीय अपवाद: "गैर-टर्मिनेशन दशमलव विस्तार; कोई सटीक प्रतिनिधित्व योग्य दशमलव परिणाम " रूबी स्क्रिप्ट के अंदर रैक कार्य कैसे चलाऊँ? हेडर और पाद लेख को विंडो से हटाएं। प्रिंट () एचटीएल लेबल पर क्लिक करते समय जेक्जरी क्लिक ईवेंट दो बार ट्रिगर करता है रनटाइम पर पायथन संस्करण का पता लगाएं JSON.stringify गहरी वस्तुओं आर के लिए स्टिडिंग पाइपिंग पायथन में eval का उपयोग? पृष्ठभूमि प्रक्रिया के पीआईडी ​​कैसे प्राप्त करें?

सी / सी ++ मैक्रो स्ट्रिंग कंसैनेटेशन

#define STR1 "s" #define STR2 "1" #define STR3 STR1 ## STR2 

क्या एसटीआर 3 == "एस 1" को जोड़ना संभव है? आप इसे एक अन्य मैक्रो फ़ंक्शन पर एल्ग्स पास करके कर सकते हैं। लेकिन क्या कोई सीधा रास्ता है?

Solutions Collecting From Web of "सी / सी ++ मैक्रो स्ट्रिंग कंसैनेटेशन"

यदि वे दोनों तार हैं तो आप ऐसा कर सकते हैं:

 #define STR3 STR1 STR2 

पूर्वप्रक्रमक आसन्न स्ट्रिंग को स्वचालित रूप से जोड़ता है।

संपादित करें:

जैसा कि नीचे बताया गया है, यह प्रीप्रोसेसर नहीं है, लेकिन कम्पाइलर जो सम्मिलन करता है।

आपको स्ट्रिंग लीटरल्स के लिए इस प्रकार की समाधान की आवश्यकता नहीं है, क्योंकि ये भाषा स्तर पर जुड़ी हुई हैं, और यह वैसे भी काम नहीं करेगा क्योंकि "s" "1" मान्य प्रीप्रोसेसर टोकन नहीं है हालांकि, सामान्य टोकन चिपकाने के लिए, यह प्रयास करें:

 /* * Concatenate preprocessor tokens A and B without expanding macro definitions * (however, if invoked from a macro, macro arguments are expanded). */ #define PPCAT_NX(A, B) A ## B /* * Concatenate preprocessor tokens A and B after macro-expanding them. */ #define PPCAT(A, B) PPCAT_NX(A, B) 

उसके बाद, उदाहरण के लिए, PPCAT(s, 1) पहचानकर्ता s1 PPCAT(s, 1) उत्पादन करता है

विषय पर जारी इन मैक्रोज़ हैं:

 /* * Turn A into a string literal without expanding macro definitions * (however, if invoked from a macro, macro arguments are expanded). */ #define STRINGIZE_NX(A) #A /* * Turn A into a string literal after macro-expanding it. */ #define STRINGIZE(A) STRINGIZE_NX(A) 

फिर,

 #define T1 s #define T2 1 STRINGIZE(PPCAT(T1, T2)) // produces "s1" 

संकेत: ऊपर STRINGIZE मैक्रो शांत है, लेकिन यदि आप कोई गलती करते हैं और इसका तर्क मैक्रो नहीं है – आपके पास नाम में कोई टाइपो था, या #include को शीर्षक फ़ाइल में #include करना भूल गया – तो कंपाइलर खुशी से कथित मैक्रो को रखेगा कोई त्रुटि के साथ स्ट्रिंग में नाम

यदि आप चाहते हैं कि STRINGIZE के तर्क हमेशा एक सामान्य सी मान के साथ एक मैक्रो है, तो

 #define STRINGIZE(A) ((A),STRINGIZE_NX(A)) 

इसे एक बार विस्तारित करेगा और इसे वैधता के लिए जांचें, उसे त्याग दें, और फिर इसे एक स्ट्रिंग में फिर से विस्तारित करें

यह समझने में मुझे कुछ समय लगा कि STRINGIZE(ENOENT) "2" बजाय "ENOENT" रूप में समाप्त हो रहा था … मैंने गलत नहीं शामिल किया था। errno.h