दिलचस्प पोस्ट
चेकबॉक्स के साथ Android सूचीदृश्य और सभी क्लिक करने योग्य AngularJS में jQuery प्लगइन्स को एकीकृत करने का सही तरीका पासवर्ड भूल गए: पासवर्ड भूल गए फ़ंक्शन को लागू करने का सबसे अच्छा तरीका क्या है? मैं कैसे सत्यापित करूं कि एक एंड्रॉइड एपीके रिहाई प्रमाण पत्र के साथ हस्ताक्षरित है? PHP में बहुआयामी सरणी छंटनी jQuery टेक्स्ट फ़ेड / ट्रांज़िशन एक टेक्स्ट से दूसरे में? htaccess के साथ निर्देशिका लिस्टिंग से इनकार करते हैं PHP स्क्रिप्ट से एक बैश स्क्रिप्ट निष्पादित स्टोरीबोर्ड में टैब बार आइटम चयनित रंग बदलें इस चित्र में आयतों को कैसे पहचाना जाए? समूह द्वारा हाल ही में गैर- NA के साथ अनुपस्थित मूल्य (एनए) बदलें Vim में टेक्स्ट चिपकाने पर ऑटो इंडेंट बंद करना एचटीएमएल 5 – बड़े एमएफ़ 4 फाइलों को स्ट्रीम कैसे करें? लिनक्स में एक्लिप्स शुरू करने में त्रुटि: "जेवीएम समाप्त बाहर निकलें कोड = 13 " पायथन: स्वचालित रूप से इंस्टेंस चर को प्रारंभ करें?

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

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

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

वेब के समाधान से एकत्रित समाधान "सी / सी ++ मैक्रो स्ट्रिंग कंसैनेटेशन"

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

 #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