if(...) {
  ...
}

ऐसा लगता है कि उपरोक्त मामले में ; वैकल्पिक है, c/c++ में } के बाद अर्धविराम कब आवश्यक है?

7
cpuer 15 जून 2011, 07:31
4
अर्धविराम वैकल्पिक नहीं है। इस if(a) if(b) { ... } else { ... } का मतलब एक बात है, जबकि if(a) if(b) { ... }; else { ... } एक सिंटैक्स त्रुटि है (else बिना मिलान if)।
 – 
Adam Rosenfield
15 जून 2011, 08:34

3 जवाब

सबसे बढ़िया उत्तर
int a[2] = {1,2}, j = 5;

जब सरणी या संरचना का आरंभ {} के साथ किया जाता है, तो बाद के सभी चर , के बाद घोषित किए जाते हैं।

संपादित करें: जैसे ही आपने अपना प्रश्न बदल दिया; ;, class, enum, आरंभीकरण सिंटैक्स घोषणाओं के बाद अनिवार्य है।

class A {};  // same for `struct
enum E {};   // enum class (c++0x)
int a[] = {1,2};  // array or object initialization
15
iammilind 15 जून 2011, 07:34
इन सबके पीछे कोई तर्क?
 – 
cpuer
15 जून 2011, 07:39
4
यह कोई औचित्य नहीं है लेकिन struct { int i; } s; C और C++ में अर्थपूर्ण है। जब आपको वस्तु की आवश्यकता नहीं होती (यहाँ, s), तब ; रहता है।
 – 
Luc Danton
15 जून 2011, 07:40
1
@cpuer: class और enum उदाहरणों के लिए, मैंने अर्नेस्ट के उत्तर पर टिप्पणियों में समझाया। सरणी या ऑब्जेक्ट इनिशियलाइज़ेशन के लिए, आपको केवल एक अर्धविराम की आवश्यकता है क्योंकि वे कथन हैं और सभी कथन ; द्वारा समाप्त किए जाते हैं :)
 – 
Billy ONeal
15 जून 2011, 07:41
@cpuer, जैसा कि @Luc ने कहा, चूंकि C++ में आप class/struct/enum घोषणा के बाद ऑब्जेक्ट/पॉइंटर्स घोषित कर सकते हैं। ; डालने से पार्सर को मदद मिलती है कि किसी ऑब्जेक्ट को घोषित करने के लिए class नाम टाइप करना होगा। चूँकि फंक्शन / namespace' are not type; the ;` उनके बाद अनिवार्य नहीं है।
 – 
iammilind
15 जून 2011, 07:45
2
 – 
rubenvb
16 जून 2011, 21:25

एक अर्धविराम अपने आप में एक खाली कथन है, और आप कहीं भी अतिरिक्त कथन जोड़ सकते हैं जहां कोई कथन कानूनी है। इसलिए आपके if के ठीक बाद वाले ब्रेसिज़ के ठीक बाद अर्धविराम लगाना कानूनी होगा, हालांकि यह if से बिल्कुल भी संबंधित नहीं होगा। केवल एक ही जगह है जिसके बारे में मैं सोच सकता हूं कि सी ++ में कक्षा घोषणा के बाद एक ब्रैकेट के ठीक बाद अर्धविराम की आवश्यकता होती है।

6
Ernest Friedman-Hill 15 जून 2011, 07:35
1
कक्षा घोषणा के बाद ; क्यों आवश्यक है लेकिन फ़ंक्शन घोषणा के बाद नहीं? सी ++ पार्सर उस मामले में ; के बिना इसे पार्स नहीं कर सकता है?
 – 
cpuer
15 जून 2011, 07:38
9
@cpuer: क्योंकि आप परिभाषा साइट पर उदाहरण घोषित कर सकते हैं। उदाहरण के लिए: struct ABC { int foo; int bar; } example;, example प्रकार का ABC नाम का वेरिएबल बनाता है।
 – 
Billy ONeal
15 जून 2011, 07:39

यदि यह एक घोषणा का अंत है, तो एक करीबी ब्रेस के बाद एक अर्धविराम अनिवार्य है। यदि यह एक कथन का अंत है तो किसी अर्धविराम की आवश्यकता नहीं है, और यदि एक का उपयोग किया जाता है, तो यह एक अतिरिक्त खाली कथन बनाता है, जो अवैध हो सकता है यदि यह मध्य है एक if-else या एक do-while (या एक try-catch C++ में)

3
Chris Dodd 16 जून 2011, 21:07
A do-while को अंत में एक सेमी-कोलन की आवश्यकता है!
 – 
rubenvb
16 जून 2011, 21:25
1
@rubenvb: यदि आप } के बाद do-while लूप में ; डालने का प्रयास करते हैं, तो आपको एक सिंटैक्स त्रुटि मिलेगी।
 – 
Chris Dodd
17 जून 2011, 06:16
2
लेकिन अंतिम ) के बाद इसकी आवश्यकता है।
 – 
rubenvb
17 जून 2011, 12:42