सी ++ एएनएसआई आईएसओ आईईसी 14882 2003 अनुलग्नक सी .1 (पेज 668):lvalue करने वाली rvalue आईएसओ सी में एक सरणी के रूपांतरण
बदलें: एक सशर्त अभिव्यक्ति, एक काम अभिव्यक्ति, या एक अल्पविराम का परिणाम अभिव्यक्ति बीन lvalue
तर्क: सी + + एक वस्तु उन्मुख भाषा है, जो लालसा पर अपेक्षाकृत अधिक जोर दे रही है। उदाहरण के लिए, कार्य lvalues वापस कर सकते हैं।
मूल सुविधा पर प्रभाव: अच्छी तरह से परिभाषित सुविधा के अर्थशास्त्र में बदलें। कुछ सी अभिव्यक्ति जो स्पष्ट रूप से लैवल्यू-टू-रावल्यू रूपांतरणों पर भरोसा करते हैं, वे अलग-अलग परिणाम प्राप्त करेंगे। उदाहरण के लिए,
char arr[100];
sizeof(0, arr)
सी + + में 100 पैदावार और सी
में sizeof(char*)
...
मैं बस आज इस पढ़ रहा था और मुझे याद है कि दो महीने एक मेरा एक दोस्त जाना एक समस्या का प्रस्ताव दिया गया था जो एक समारोह लिखना था जो 0 लौटाएगा यदि इसे सी ++ और 1 के साथ संकलित किया गया था, तो इसे सी के साथ संकलित किया गया था। मैंने इस तथ्य का लाभ उठाया कि सी में एक संरचना बाहरी दायरे में थी। इसलिए, इस नई जानकारी पर विचार करते हुए, मैंने फैसला किया कि यह उपरोक्त समस्या का एक और समाधान होगा, जिस पर मैंने माइक्रोसॉफ्ट विजुअल स्टूडियो 2008 पर कोशिश की थी, लेकिन इस पर ध्यान दिए बिना कि इसे सी या सी ++ कोड sizeof(0, arr)
के रूप में संकलित किया गया है, तो हमेशा 4 उत्पन्न होता है। तो 2 प्रश्न:
1. आईएसओ सी क्या है? क्या यह वर्तमान सी मानक है? क्या यह एकमात्र है (मैंने सुना है कि सी तेजी से विकसित हो रहा है) 2. क्या यह एक माइक्रोसॉफ्ट सी ++ बग है?
TIA
संपादित करें: माफ करना उत्पादन के साथ मिश्रित और यह संपादित कर ली:
एमएसवीसी 2010 के साथ, 'आकार (0, एआर)' का मूल्यांकन '4' (जब सी ++ के रूप में संकलित किया गया) का मूल्यांकन होता है। जी ++ के साथ, यह '100' का मूल्यांकन करता है। –