यह निर्दिष्ट नहीं है कि +
के तर्कों में से कौन सा तर्क पहले मूल्यांकन किया गया है - लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि सी और सी ++ में, एक ही ऑब्जेक्ट को दोहराए जाने वाले अनुक्रम बिंदु के बिना दो बार संशोधित करना पूरी तरह से अपरिभाषित व्यवहार है।
यहाँ आप एक बीच के अनुक्रम बिंदु के बिना x
तीन बार संशोधित कर रहे हैं, तो आप आरक्षण बंद अच्छी तरह से कर रहे हैं;)
C99 मानक के प्रासंगिक हिस्सा है "6.5 भाव":
पिछले और अगले अनुक्रम बिंदु एक वस्तु अपने संग्रहीत एक के मूल्यांकन से एक बार ज्यादा से ज्यादा संशोधित मूल्य होगा बीच 2 एन अभिव्यक्ति। इसके अलावा, पूर्व मान केवल संग्रहीत मान निर्धारित करने के लिए पढ़ा जाएगा।
और
3 ऑपरेटरों और ऑपरेंड के समूहीकरण वाक्य रचना से मिलता है। के रूप में बाद में निर्दिष्ट छोड़कर (? समारोह-कॉल(), & &, || के लिए: और अल्पविराम ऑपरेटर), subexpressions की मूल्यांकन के आदेश और जिस क्रम में साइड इफेक्ट जगह ले दोनों अनिर्दिष्ट हैं ।
यह कानूनी कोड है कि मूल्यांकन के अनिर्दिष्ट आदेश को दर्शाता है लिखने के लिए संभव है - उदाहरण के लिए:
#include <stdio.h>
int foo(void)
{
puts("foo");
return 1;
}
int bar(void)
{
puts("bar");
return 2;
}
int main()
{
int x;
x = foo() + bar();
putchar('\n');
return x;
}
(यह है कि क्या आप foobar
या barfoo
के उत्पादन में मिल अनिर्दिष्ट है)।
डुप्लिकेट्स: http://stackoverflow.com/questions/949433/could-anyone-explain-these-undefined-behaviors-iiiii-etc http://stackoverflow.com/questions/1826414/whats-the-value- ऑफ-आईआई-बंद http://stackoverflow.com/questions/1788696/how-the-code-behaves- अलग-for-java-and-c-compiler – bk1e
lol। मॉड मोड ने अपना खुद का प्रश्न बंद कर दिया: डी – Earlz
@ बीके 1e: लिंक के लिए धन्यवाद। मुझे लगा कि यह पहले यहां कवर किया जाएगा, लेकिन जब मैंने सवाल पूछा तो यह नहीं आया। मुझे लगता है कि मूल खोजने के लिए सबसे तेज़ तरीका सिर्फ पूछना होगा। :) –