2010-08-14 10 views
8
नहीं

Hiii सभीइसी प्रकार के वाक्य रचना लेकिन एक त्रुटि दिखाता है लेकिन एक और

मैं आज

int main() 
{ 
    int a = 1,2; /* Shows error */ 
    int b = (1,2); /* No error */ 
} 

इस कार्यक्रम बनाया त्रुटि क्यों पहले एक से पता चलता है, जबकि दूसरा एक ऐसा नहीं करता है? बस() एक प्रोग्राम संकलित करता है। क्यूं कर?

--Shruti

उत्तर

0

(1,2), अर्थात 2 सूची में अंतिम अभिव्यक्ति करने के लिए मूल्यांकन करता है।

एक और उदाहरण: (a,b,c)c का मूल्यांकन करेगा।

मामले में आप एक भिन्नात्मक नंबर का उपयोग करना चाहते हैं, एक नाव/डबल प्रकार का उपयोग करें और एक दशमलव प्रतीक के रूप में डॉट का उपयोग करें: double d = 1.2;

6

कोष्ठकों के अंदर, भाषा को स्पष्ट अभिव्यक्ति हो जाएगा। उस स्थिति में (b), अल्पविराम सी

कोष्ठक के बिना अल्पविराम ऑपरेटर का प्रतिनिधित्व करता है, भाषा निर्दिष्ट करती है कि परिवर्तनीय घोषणाओं को अल्पविराम से अलग किया जाता है। a के उदाहरण में, कंपाइलर (पार्सर) अतिरिक्त परिवर्तनीय घोषणाओं की अपेक्षा कर रहा है।

9

int a = 1,2;2 को एक वैरिएबल नाम के रूप में माना जाता है जो किसी संख्या से शुरू नहीं हो सकता है, इसलिए त्रुटि।

int b = (1,2);comma operator बाएं से दाएं ऑपरेंड मूल्यांकन करता है और सूची में अंतिम अभिव्यक्ति देता है अर्थात 2

3

कारण अपने पहले बयान int a = 1,2; में अल्पविराम एक दृश्य ऑपरेटर होने के लिए पार्स नहीं किया जाता है। यह एक घोषणा सूची का हिस्सा है और 2 नामक एक पूर्णांक चर को तुरंत चालू करने का प्रयास करता है जिसे भाषा द्वारा अनुमति नहीं है।

दूसरे कथन में ब्रांड्स int b = (1,2); कोमा को अनुक्रम ऑपरेटर के रूप में पार्स करने के लिए मजबूर करें।

0

उनमें से कोई भी मुट्ठी पर मुझे समझ में नहीं आया।

लेकिन फिर मुझे लूप के लिए कई संचालन याद आया। उदाहरण के लिए:

for (a=1,b=2; a<1; a++) 

यह जानते हुए कि एक वैध अभिव्यक्ति है, और भाव मान्य भाषा elemnts हैं कि, मेरे निष्कर्ष है कि (1,2) का मूल्यांकन करता है 1 (लेकिन इसके साथ कुछ नहीं करता है) है, तो मूल्यांकन करता है 2 और रिटर्न 2.

और अंत में:

b = (1,2); 

क्या करता है का मूल्यांकन 1 और 2 के रूप में पहले, लौट 2, और यह आवंटित ख है।

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