2011-03-09 9 views
9

मैंने जावा और सी में निम्नलिखित कोड लिखे हैं लेकिन उन कार्यक्रमों का उत्पादन अलग है। जावा एप्लिकेशन ने 21 और सी आवेदन दिया 22 (मैं जीसीसी कंपाइलर का उपयोग करता हूं)।जावा में एक ही कोड अलग-अलग क्यों काम करता है?

क्या आप इसका वर्णन कर सकते हैं?

यहां जावा कोड है।

class test 
{ 

    public static void main(String args[]) 
    { 
     int a =5; 
     int b = (++a) + (++a) + (++a); 
     System.out.println(b); 
    } 

} 

यहां सी कोड है।

#include <stdio.h> 

int main(int argc, const char* argv[]) 
{ 
int a =5; 
int b = (++a) + (++a) + (++a); 
printf("%d \n",b); 
} 
+1

यदि यह स्पष्ट नहीं है, तो आपको कभी भी ऐसे कार्यक्रमों में कोड लिखना नहीं चाहिए जो "हैलो वर्ल्ड" प्रोग्राम में नहीं आते हैं। – darioo

+3

@ darioo कभी नहीं = हमेशा। यह '!! ए' जैसा है। –

+4

@ रैडेक: अंग्रेजी भाषा थोड़ा अलग काम करती है – darioo

उत्तर

34
int b = (++a) + (++a) + (++a); 

यह सी में undefined behavior जिसका मतलब है कि यह उत्पादन 21, 22, 42 सकते हैं, यह दुर्घटना या जो कुछ भी यह चाहता है क्या कर सकते हैं,। यह यूबी है क्योंकि sequence points

व्यवहार में जावा में परिभाषित किया गया है क्योंकि स्केलर ऑब्जेक्ट का मान एक ही अभिव्यक्ति के भीतर एक से अधिक बार बदल दिया गया है क्योंकि इसमें जावा में परिभाषित किया गया है क्योंकि इसमें अधिक अनुक्रम बिंदु हैं। Here's an explanatory link

+0

यह अपरिभाषित क्यों है? – Janaka

+0

@ जनका: मेरा संपादन देखें –

+0

क्या यह जावा में व्यवहार को परिभाषित करता है? – Thilo

3

जावा मूल्यांकन में left to right है, इसलिए परिणाम सुसंगत है। 6 + 7 + 8 == 21

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