मुझे पता है कि sizeof
कभी भी अपने ऑपरेंड का मूल्यांकन नहीं करता है, सिवाय इसके कि विशिष्ट मामले को छोड़कर ऑपरेंड एक वीएलए है। या, मैं सोचा मुझे पता था।आकार के ऑपरेटिंग में वीएलए और दुष्प्रभाव
void g(int n) {
printf("g(%d)\n", n);
}
int main(void) {
int i = 12;
char arr[i]; // VLA
(void)sizeof *(g(1), &arr); // Prints "g(1)"
(void)sizeof (g(2), arr); // Prints nothing
return 0;
}
क्या चल रहा है?
बस मामले में, यह Coliru पर जीसीसी 5.1 के साथ संकलित है।
एक बार, अपने स्वयं के प्रश्न का उत्तर देने के लिए एक अच्छा मामला। – Bathsheba
आप इसे कहीं कहीं जोड़ना चाहेंगे: * 6.5.3.4 आकार और _Aignignof ऑपरेटरों यदि ऑपरेंड का प्रकार एक चर लंबाई लंबाई प्रकार है, तो ऑपरेंड का मूल्यांकन किया जाता है; अन्यथा, ऑपरेंड का मूल्यांकन नहीं किया जाता है और नतीजा पूर्णांक निरंतर होता है। * इसलिए बुखार पाठकों को भ्रमित कर दिया जाएगा। – this
@ यह धन्यवाद :) – Quentin