# हाइफ़न के अंदर # हाइफ़न


83

मैं कुछ इस तरह लिखने की कोशिश कर रहा हूं:

क्या COV_ONइस तरह परिभाषित करने का कोई तरीका है ? मुझे पता है कि मैंने जो ऊपर किया है वह गलत है क्योंकि मैं #ifdef#define के अंदर नहीं हो सकता । ( #में एक अनुमत चरित्र नहीं है #define)। तो क्या इसका कोई हल है?


1
यहाँ सभी उत्तर do {} while(0)खाली कथन से बचने के लिए (या समतुल्य) के उपयोग को छोड़ देते हैं ; लिंक्ड डुप्लिकेट पर मेरा जवाब
रोजर लिप्सकॉम्ब

जवाबों:


89

संभव नहीं। इसे दूसरे तरीके से करें:


21

बस इसे चारों ओर मोड़ो:


आपके जवाब के लिए धन्यवाद। मैंने COV_ON (चालू) और COV_ON (बंद) की कोशिश की, लेकिन फिर मुझे एक त्रुटि मिली: त्रुटि 'अपेक्षित'), निकट। समस्या के बारे में कोई विचार।
Agent.smith

वे तार हैं। क्या मुझे उन्हें उद्धरण के अंदर नियमित तार के रूप में उपयोग करने की आवश्यकता है? जैसे "ऑन" और "ऑफ"।
Agent.smith

यह COVERAGE की आपकी परिभाषा पर निर्भर करता है, लेकिन मुझे लगता है कि आपको उन्हें उद्धृत करने की आवश्यकता है। मेरा सुझाव है कि आप इस नए मुद्दे के लिए एक और प्रश्न खोलें।
फिलिप

मैंने इसे उद्धरणों के साथ आज़माया लेकिन कोई फायदा नहीं हुआ। मैंने पहले ही एक नया सूत्र खोल दिया है। आपको बता दें कि अगर आपको लगता है कि _Pragma के लिए वाक्यविन्यास गलत है।
Agent.smith

14

यह एक पुराना प्रश्न है, लेकिन इसके उत्तर की आवश्यकता है।

मैक्रो के भीतर एक इनलाइन ifdef का उपयोग करने के बजाय आप चुनिंदा रूप से एक __VA_ARGS__मैक्रो को एक ही काम करने के लिए परिभाषित कर सकते हैं

यह एक ifdef के समान कार्यशीलता है सिवाय इसके कि आप शुरुआत और अंत को परिमार्जन करने के लिए कोष्ठक प्राप्त करते हैं (जिसमें अधिकांश IDE में कोई समस्या नहीं है कोड-तह) जबकि आप अभी भी उपयोग कर सकते हैं #defineऔर #ifdefसंदर्भ के भीतर, #includeअनुमति नहीं है। इनलाइन क्षमताओं के समान पाने के लिए #else, आप इसी तरह एक मैक्रो को परिभाषित कर सकते हैं:

केवल एक ही NO_FOO()/IF_FOOकोड का उत्पादन करेगा।

ठीक है, यह एक आसान हैक है, लेकिन क्या हम इसे अधिक उपयोगी बना सकते हैं #ifdefs... बूलियन तर्क और कॉन्फ़िगरेशन शायद? कुछ सत्य सारणी (और एक युगल सहायक मैक्रोज़) स्थापित करने देता है।

config.h

कोड


मुझे आपकी शैली पसंद है (=
étale-cohomology

6

6

आप नहीं कर सकते। लेकिन आप स्वैप कर सकते हैं #ifdefऔर #define:


आपके जवाब के लिए धन्यवाद। मैंने COV_ON (चालू) और COV_ON (बंद) की कोशिश की, लेकिन फिर मुझे एक त्रुटि मिली: त्रुटि 'अपेक्षित'), निकट। समस्या के बारे में कोई विचार।
Agent.smith

आपके संकलक को जाने बिना, हमें यह जानना होगा कि अपेक्षित _Pragmaसिंटैक्स क्या है; आप इसे मैक्रो के बिना कैसे करेंगे?
सैम होसेवर

मैं VC2005 कंपाइलर का उपयोग कर रहा हूं और _Pragma सिंटैक्स ऑनलाइन देखा। मैंने पहले कभी भी #प्रगमा का इस तरह इस्तेमाल नहीं किया।
Agent.smith

इसके लिए आपको एक स्ट्राइक हैक की आवश्यकता होगी। इस प्रश्न और उत्तर को देखें ।
सैम होसेवर

मुझे लगता है कि समस्या VC2005 है। वे _प्रगमा का उपयोग नहीं करते, लेकिन __pragma का उपयोग करते हैं। मुझे यकीन नहीं है लेकिन यह ऐसा दिखता है। लेकिन फिर भी मुझे __pragma के साथ एक अज्ञात अज्ञात चेतावनी मिल रही है।
Agent.smith

3

जैसा कि आपने उल्लेख किया है कि #define में #ifdef होना संभव नहीं है। इसके बजाय आपको जो करना चाहिए वह क्रम उल्टा है:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.