2010-12-04 8 views

उत्तर

9

एक अल्पविराम ऑपरेटर एक अनुक्रम बिंदु है: प्रत्येक अल्पविराम से अलग अभिव्यक्ति का मूल्यांकन बाएं से दाएं से किया जाता है। परिणाम में सही ऑपरेंड का प्रकार और मान होता है। कार्यात्मक रूप से, अपने उदाहरण के बराबर है (और अधिक पठनीय?):

else 
{ 
    *pbuf++ = '%'; 
    *pbuf++ = to_hex(*pstr >> 4); 
    *pbuf++ = to_hex(*pstr & 15); 
} 

यहाँ एक और उदाहरण है कि मानक अल्पविराम ऑपरेटर (6.5.17) के लिए प्रदान करता है:

समारोह कॉल में

f(a, (t=3, t+2), c) 

फ़ंक्शन ऐसे तीन तर्कों, दूसरा जिनमें से महत्व है है 5.

8

विकिपीडिया से:

C और C++ प्रोग्रामिंग भाषाओं, अल्पविराम ऑपरेटर में (टोकन के प्रतिनिधित्व वाले,) एक द्विआधारी ऑपरेटर की कि उसकी पहली संकार्य मूल्यांकन करता है और परिणाम को छोड़ देता है, और उसके बाद दूसरे संकार्य और रिटर्न का मूल्यांकन करता है यह मान (और प्रकार)। अल्पविराम ऑपरेटर में किसी भी सी ऑपरेटर की सबसे कम प्राथमिकता होती है, और अनुक्रम बिंदु के रूप में कार्य करता है।

ऑपरेटर के रूप में कॉमा टोकन का उपयोग फ़ंक्शन कॉल और परिभाषाओं, परिवर्तनीय घोषणाओं, enum घोषणाओं, और इसी तरह की संरचनाओं में इसके उपयोग से अलग है, जहां यह विभाजक के रूप में कार्य करता है।

इस उदाहरण में, दूसरी और तीसरी पंक्तियों के बीच भिन्न व्यवहार अल्पविराम ऑपरेटर के कारण असाइनमेंट की तुलना में कम प्राथमिकता है।

int a=1, b=2, c=3, i; // comma acts as separator in this line, not as an operator 
i = (a, b);    // stores b into i        ... a=1, b=2, c=3, i=2 
i = a, b;    // stores a into i. Equivalent to (i = a), b;  ... a=1, b=2, c=3, i=1 
i = (a += 2, a + b); // increases a by 2, then stores a+b = 3+2 into i ... a=3, b=2, c=3, i=5 
i = a += 2, a + b;  // increases a by 2, then stores a = 5 into i  ... a=5, b=2, c=3, i=5 
i = a, b, c;   // stores a into i        ... a=5, b=2, c=3, i=5 
i = (a, b, c);   // stores c into i        ... a=5, b=2, c=3, i=3 

लिंक: http://en.wikipedia.org/wiki/Comma_operator

+0

'i = a, b;', 'बी' के साथ क्या हो रहा है? इस मामले में कोई 'बी' क्यों लिखेंगे? – MichaelChirico

0

यह कार्य क्यों नहीं करना चाहिए? यह %, to_hex(*pstr >> 4), to_hex(*pstr & 15) को pbuf द्वारा अनुक्रमित अनुक्रमिक स्मृति ब्लॉक पर सेट करता है। समकक्ष कोड निम्न हो सकता है:

else { 
    *pbuf = '%'; 
    *(pbuf + 1) = to_hex(*pstr >> 4); 
    *(pbuf + 2) = to_hex(*pstr & 15); 
    pbuf += 3; 
} 
संबंधित मुद्दे