अगर मैं निम्नलिखित अभिव्यक्ति है:आदेश
c = (a) * (b)
क्या C90 मानक उपसूचक 'एक' और 'बी' के आदेश मूल्यांकन के बारे में कहना है?
अगर मैं निम्नलिखित अभिव्यक्ति है:आदेश
c = (a) * (b)
क्या C90 मानक उपसूचक 'एक' और 'बी' के आदेश मूल्यांकन के बारे में कहना है?
कोई निर्दिष्ट आदेश नहीं है क्योंकि गुणात्मक ऑपरेटर अनुक्रम बिंदु नहीं है। अनुक्रम बिंदु में अल्पविराम ऑपरेटर, पूर्ण अभिव्यक्ति का अंत, और फ़ंक्शन कॉल शामिल हैं। इस प्रकार (a)
और (b)
के मूल्यांकन का आदेश कंपाइलर कार्यान्वयन पर निर्भर है। इसलिए आपको (a)
में कुछ करने का प्रयास नहीं करना चाहिए, जिसके पास एक वैध परिणाम उत्पन्न करने के लिए (b)
में एक दुष्प्रभाव होगा जिसे आप देखना चाहते हैं।
उदाहरण के लिए:
int a=5;
int b = (a++) * (a++); //<== Don't do this!!
आप सी के लिए अनुक्रम अंक की एक पूर्ण सूची चाहते हैं, आप एक more thorough reference here की जाँच कर सकते हैं।
*
बाइनरी ऑपरेटर के संचालन का मूल्यांकन आदेश C90 में निर्दिष्ट नहीं है।
यहाँ C90 स्टैंडर्ड से प्रासंगिक पैरा (प्रश्न C90 के बारे में पूछा के रूप में) है:
(C90, 6.3) "के रूप में वाक्य रचना ने संकेत दिया है या नहीं तो बाद में निर्दिष्ट (सिवाय समारोह-कॉल के लिए ऑपरेटर(), & &, ||,:।, और अल्पविराम ऑपरेटर) subexpressions के मूल्यांकन के आदेश और जिस क्रम में साइड इफेक्ट जगह ले दोनों unspecitied रहे हैं "
*
ऑपरेटर के लिए, यदि हम साइड-इफेक्ट ऑपरेंड के साथ उदाहरण लें:
c = f() * g();
कार्यान्वयन f()
पहले या g()
पहले कॉल कर सकते हैं:
a = f();
b = g();
c = a * b;
या
a = g();
b = f();
c = a * b;
दोनों वैध अनुवाद कर रहे हैं।
[कुछ भी नहीं) (http://en.wikipedia.org/wiki/Unspecified_behavior) :) :) :) :) – dasblinkenlight
होमवर्क सवालों के लिए होमवर्क टैग की आवश्यकता होती है। –
@Robert: मुझे नहीं लगता कि कोई भी इसे अपने होमवर्क में पूछता है ... – Bruce