2012-05-24 23 views
6

मैं निम्नलिखित कोड को देखा है में else`:उपयोग मैक्रो

#define QL_REQUIRE(condition,message) \ 
if (!(condition)) { \ 
    std::ostringstream _ql_msg_stream; \ 
    _ql_msg_stream << message; \ 
    throw QuantLib::Error(__FILE__,__LINE__, \ 
          BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \ 
} else 

इससे हम इसका इस्तेमाल करने लगता है।

void testingMacros1(){ 
    double x =0.0; 
    QL_REQUIRE (x!=0 ," Zero number !"); 
} 

मुझे लगता है अंत में else कुछ विशेष उपयोग किया है।

प्रश्न> इस मैक्रोज़ परिभाषा के अंत में else का उपयोग क्या है?

धन्यवाद

+0

देखो कहा मैक्रो। सी ++ वाक्यविन्यास सीपीपी के बाद वैध होना चाहिए; तो संदर्भ में इसे देखकर "क्यों" प्रकट करना चाहिए। –

+0

@pst, मैंने मैक्रो का उपयोग पोस्ट किया है। – q0987

उत्तर

10

मैक्रो स्थिति की जांच करता है। इसे true होने की स्थिति की आवश्यकता है, अन्यथा यह अपवाद फेंक देगा। यदि यह सच है, तो आप सामान्य if कथन के बाद ब्रेसिज़ डाल देंगे। हालत में

QL_REQUIRE (x != 0, "x must not be 0") 
{ 
    y = 100/x; //dividing by 0 is bad 
} 

मैक्रो बाद के चरणों, और अगर यह विफल रहता है, यह देखते हुए संदेश प्रिंट होगा:

आप इस तरह उसका प्रयोग करेंगे। यदि यह विफल नहीं होता है, तो आपके ब्रेसिज़ या एक-लाइनर अन्य कथन बनाते हैं। पूरी चीज को देखते समय तर्क थोड़ा उलटा होता है। इसका उपयोग करते समय, यह if जैसा है, लेकिन जब इसे 0bऔर else प्रकार को उलट दिया जाता है, तो इसे सबबिंग करते समय।

यह एक तरह से यह कह की तरह है: का विस्तार उपयोग में

assert (x != 0 && "x must not be 0"); 
y = 100/x; //dividing by 0 is bad 
+0

मैंने आपके उत्तर के आधार पर मैक्रो के पीछे विचार देखा है। मैक्रोज़ 'QL_REQUIRE' के बाद ';' या '{}' अन्यथा' अन्यथा 'का पालन किया जाना चाहिए संकलन त्रुटि को ट्रिगर करेगा। 'अगर (! हालत) {} और;'। – q0987

+0

@ q0987, ठीक है जैसे कि अगर किसी कथन का कुछ भी पालन किया जाना चाहिए। हालांकि, दोनों मामलों में, यदि आप शरीर में रखना भूल जाते हैं, तो आपको अगली पंक्ति के कारण केवल कुछ स्थितियों के तहत निष्पादित करने के कारण अजीब तर्क मिलता है। – chris

संबंधित मुद्दे