दिलचस्प पोस्ट
एक वेबपेज में एक विशाल ज़िप (कई ब्लॉब्स से) को बनाने और डाउनलोड करने के सर्वोत्तम अभ्यास मैं नए YouTube डेटा एपीआई (वी 3) के साथ एक निश्चित चैनल के लिए अपलोड किए गए वीडियो की एक सूची कैसे प्राप्त करूं? एक्सएलएल के लिए एक्सएलएल का उपयोग करें प्रोग्रामिंग ब्लूटूथ को iphone एसडीके में चालू करें? Node.js के लिए एसिंक्रोनस फ़ंक्शन कैसे लिखे इसे संपादन योग्य बनाने के बिना यूआईटीextफ़िल्ड पर कॉपी और पेस्ट सक्षम करें कोणीय जेएस और गूगल एपीआई client.js (गैपसी) स्थानीय रूप से एक Nuget पैकेज .nupkg फ़ाइल को कैसे स्थापित करें? रैपर "https" खोजने में असमर्थ – क्या आपने PHP को कॉन्फ़िगर करते समय इसे सक्षम करना भूल गए थे? #pragma पैक प्रभाव एक बार चार्ट में प्रत्येक बार के लिए अलग रंग; ChartJS गतिविधि के निर्माता में क्यों appapplicationContext () प्राप्त करें, शून्य पॉइंटर अपवाद फेंकता है? मौजूदा एएसआईएन के साथ आइटम के लिए सही अमेज़ॅन मेगावाट का प्रवाह पीडीओ स्टेटमेंट्स में स्तंभ नामों से बचने एसयूएमआईएफ तिथि के लिए एक्सेल फॉर्मूला विशेष महीने में आता है

## और __LINE__ के साथ सी मैक्रो बनाना (स्थिति मैक्रो के साथ टोकन समापन)

मैं एक सी मैक्रो बनाना चाहता हूँ जो लाइन नंबर पर आधारित एक नाम के साथ फ़ंक्शन बनाता है मैंने सोचा कि मैं ऐसा कुछ कर सकता हूं (असली फ़ंक्शन में ब्रेसिज़ के भीतर बयान होगा):

#define UNIQUE static void Unique_##__LINE__(void) {} 

जो मुझे आशा थी कि यह कुछ करने के लिए विस्तार होगा:

 static void Unique_23(void) {} 

यह काम नहीं करता है टोकन सम्मिलन के साथ, स्थिति मैक्रोज़ का शाब्दिक रूप से इलाज किया जाता है, जिसमें विस्तार होता है:

 static void Unique___LINE__(void) {} 

क्या ऐसा करना संभव है?

(हां, एक वास्तविक कारण है कि मैं ऐसा करना चाहता हूं, इससे कोई फर्क नहीं पड़ता कि यह कैसे बेकार है)।

Solutions Collecting From Web of "## और __LINE__ के साथ सी मैक्रो बनाना (स्थिति मैक्रो के साथ टोकन समापन)"

समस्या यह है कि जब आपके पास मैक्रो प्रतिस्थापन होता है, तो पूर्वप्रक्रिया मैक्रोज़ को केवल तब ही विस्तारित करेगा जब न तो स्ट्रिंगिंग ऑपरेटर # और टोकन-पेस्टिंग ऑपरेटर ## इसके लिए लागू हो। इसलिए, आपको indirection के कुछ अतिरिक्त परतों का उपयोग करना होगा, आप टोकन-पेस्टिंग ऑपरेटर को एक पुनरावर्ती विस्तारित तर्क के साथ उपयोग कर सकते हैं:

 #define TOKENPASTE(x, y) x ## y #define TOKENPASTE2(x, y) TOKENPASTE(x, y) #define UNIQUE static void TOKENPASTE2(Unique_, __LINE__)(void) {} 

उसके बाद, UNIQUE के विस्तार के दौरान __LINE__ को लाइन नंबर पर बढ़ाया जाता है (चूंकि यह या तो # या ## साथ शामिल नहीं है) और फिर टोकन TOKENPASTE के विस्तार के दौरान होता है।

यह भी ध्यान दिया जाना चाहिए कि __COUNTER__ मैक्रो भी है, जो हर बार इसका मूल्यांकन किया जाता है, एक नए पूर्णांक के लिए फैलता है, अगर आपको समान पंक्ति पर UNIQUE मैक्रो के एकाधिक __COUNTER__ आवश्यकता होती है। नोट: __COUNTER__ एमएस विज़ुअल स्टूडियो, जीसीसी (वी 4.3 के बाद से) और क्लैंग द्वारा समर्थित है, लेकिन मानक सी नहीं है।

जीसीसी को "रैपिंग" (या साकार) की आवश्यकता नहीं होती है, जब तक कि परिणाम "स्ट्रैटेड" होने की आवश्यकता नहीं होती है। जीसीसी के पास विशेषताएं हैं लेकिन सभी को सादे सी संस्करण 1 के साथ किया जा सकता है (और कुछ तर्क है कि बर्कले 4.3 सी इतनी तेज है कि इसका उपयोग करने के तरीके सीखने में लायक है)।

** क्लैग (एलएलवीएम) मैक्रो विस्तार के लिए सही ढंग से व्हाइट स्पेस नहीं है – यह व्हाइसेस्पेस जोड़ता है (जो निश्चित रूप से परिणाम को आगे प्री-प्रोसेसिंग के लिए सी पहचानकर्ता के रूप में परिणाम देता है) **, झूठी बस # या * मैक्रो विस्तार नहीं करता एक सी प्रीप्रोसेसर के रूप में दशकों से होने की संभावना है। मुख्य उदाहरण X11 संकलित कर रहा है, मैक्रो "कंसैट 3" टूटा हुआ है, इसका नतीजा अब MISNAMED C पहचानकर्ता है, जो निश्चित रूप से निर्माण करने में विफल रहता है। और मैं चीजों के निर्माण के लिए शुरुआत कर रहा हूँ विफल उनके पेशे हैं

मुझे लगता है कि इसका जवाब है "नया सी जो मानकों को तोड़ता है, वह खराब है C", ये हैक्स हमेशा (क्लॉबर नेमस्पेस) का चयन करते हैं, वे बिना किसी कारण के लिए चूक करते हैं, लेकिन वास्तव में "सी सुधार नहीं" करते हैं (अपने स्वयं के कहने को छोड़कर) कहते हैं कि यह कोंटरापशन है कि वे यह बताते हैं कि वे सभी टूटने से क्यों दूर हो गए हैं, कोई भी अभी तक उन्हें जिम्मेदार नहीं ठहराया है)।


यह एक ऐसी समस्या नहीं है कि पहले सी प्री-प्रोसेसर ने UNIq_ () __ का समर्थन नहीं किया क्योंकि उन्होंने # प्रगामा का समर्थन किया था, जो "कोड में कंपाइलर ब्रांड हैकिंग को हैकिंग के रूप में चिह्नित करने की अनुमति देता है" और यह भी प्रभावी रूप से मानकों के प्रभाव के बिना भी कार्य करता है: चूक बेकार है wonton टूटना है, और एक ही नाम (नेमस्पेस clobbering) का उपयोग करते समय एक समारोह क्या बदल रहा है … मेरी राय में मैलवेयर