मैं 'some'
MSVC द्वारा उत्पन्न कोडांतरक कोड में दो शाब्दिक देख सकता हूं , लेकिन केवल एक क्लेंग और जीसीसी के साथ। यह कोड निष्पादन के पूरी तरह से अलग परिणामों की ओर जाता है।
static const char *A = "some";
static const char *B = "some";
void f() {
if (A == B) {
throw "Hello, string merging!";
}
}
क्या कोई उन संकलन आउटपुट के बीच अंतर और समानता की व्याख्या कर सकता है? जब कोई अनुकूलन का अनुरोध नहीं किया जाता है तब भी क्लैंग / जीसीसी कुछ का अनुकूलन क्यों करता है? क्या यह किसी प्रकार का अपरिभाषित व्यवहार है?
मैं यह भी देखता हूं कि अगर मैं नीचे दिखाए गए घोषणाओं को बदलता हूं, तो क्लैंग / gcc / msvc "some"
कोडांतरक कोड में बिल्कुल भी नहीं छोड़ता है । व्यवहार अलग क्यों है?
static const char A[] = "some";
static const char B[] = "some";