आपका कोड पूरी तरह से सही नहीं है, मैं तुम्हें अपने मैक्रो
#define somemacro(a) {}
कारण में रिक्त ब्रेसेस डाल करने के लिए सुझाव है कि आसान है, आप कोड और अधिक सुरक्षित हो जाएगा!
इस उदाहरण लेते हैं:
if(Value)
somemacro(a)
else
somemacro(b)
तो मैक्रो खाली है, अपने कोड संकलन नहीं होगा! ("अन्य" से पहले अपेक्षित प्राथमिक-अभिव्यक्ति)। वैसे भी कुछ शैली नियमों
if(Value)
{
somemacro(a)
}
else
{
somemacro(a)
}
लिखने के लिए आपको मजबूर ताकि एक समस्या नहीं होगी।
एक और विकल्प ";" का उपयोग करना है "{}" के बजाय, लेकिन उसी मामले में वह विकल्प आपको संकलन समय चेतावनियां देगा, जबकि खाली ब्रेसिज़ चेतावनी नहीं देंगे और न ही त्रुटियां!
if(value)
somemacro(a);
else
somemacro(b);
if(value)
{};
else
{};
कि संकलन नहीं कर सकते करने के लिए विस्तार होगा)
ले निम्नलिखित मामले; (अर्धविराम अभी भी बेहतर है, भले ही चेतावनी है)!
है यही कारण है कि मैक्रो बुराई कर रहे हैं
(के बाद से मैक्रो सरल पाठ प्रतिस्थापन कर रहे हैं, dumbs के नियम हमेशा मैन्युअल रूप से कोड को बदलने के लिए कोशिश करते हैं और देखो क्या होता है, वहाँ भी कर रहे हैं उपकरण है कि के लिए मैक्रो का स्थान ले लेगा होना चाहिए आप विस्तार कोड दिखा।)
फिर भी guessin अगर वहाँ एक मैक्रो कि पूरी तरह से सुरक्षित है? हाँ, यह "एनओपी"
#define somemacro(a) ((void)0)
कि किसी भी मामले में काम करेंगे (compilers का भी स्रोत फ़ाइलों कि एनओपी के रूप में, उदाहरण के के लिए सिर्फ "assert.h"
यह बहुत उपयोगी जवाब है मुझे लगता है कि अच्छी नौकरी ;) – GameDeveloper
हाय मैं अपने पहले कोड समझ में नहीं आता [यहाँ मैं करने की कोशिश की] (http://codepad.org/WbSlIXkc) .. मुझे लगता है कि 'लिखने के लिए अपनी बस एक त्रुटि पूर्णांक foo (int अप्रयुक्त (मान))' यदि मैक्रो परिभाषा balank ** है ** ** –
@ ग्रिशेश चौहान, आपने सी और सी ++ के बीच अंतरों में से एक को अभी खोजा है। यहाँ देखें: http://codepad.org/flX8m3sk –