2011-11-05 11 views
7

क्या संरचना सदस्य प्रारंभिक अभिव्यक्तियों के बीच कोई अनुक्रम बिंदु है?संरचना सदस्य प्रारंभिकरण के बीच कोई अनुक्रम बिंदु है?

उदाहरण के लिए, क्या यह अच्छी तरह से परिभाषित किया गया है कि कोड बेलो हमेशा "ए, बी" प्रिंट करेगा?

#include <stdio.h> 

typedef struct { 
    char *bytes; 
    int position; 
    int length; 
} Stream; 

typedef struct { 
    char a; 
    char b; 
} Pair; 

char streamgetc(Stream *stream) { 
    return (stream->position < stream->length) ? stream->bytes[stream->position++] : 0; 
} 

int main(void) { 
    Stream stream = {.bytes = "abc", .position = 0, .length = 3}; 
    Pair pair = {.a = streamgetc(&stream), .b = streamgetc(&stream)}; 
    printf("%c, %c\n", pair.a, pair.b); 
    return 0; 
} 

उत्तर

6

मुझे लगता है कि §6.7.8-23 यह सुलझेगी:

जिस क्रम में कोई साइड इफेक्ट प्रारंभ सूची भाव के बीच होते हैं unspeci फाई एड है।

और यौगिक शाब्दिक के बारे में:

§6.5.2.5-7

सभी अर्थ नियमों और 6.7.8 में प्रारंभकर्ता सूचियों के लिए बाधाओं यौगिक शाब्दिक पर लागू होते हैं।

1

नहीं, सी मानक के अनुलग्नक सी में खुद के लिए देखते हैं (या ड्राफ़्ट के n1256, n1516, आदि) कर सकते हैं।

प्रत्येक पूर्ण declarator के बाद एक दृश्य बिंदु है, और वहाँ अभी भी प्रारंभ कि && या कॉल कार्यों का उपयोग अंदर भाव से अनुक्रम अंक हो जाएगा।

फ़ंक्शन तर्कों के बीच कोई अनुक्रम बिंदु नहीं है।

func(getc(), getc()); // who knows what order? 
2

मेरा मानना ​​है कि C99 TC2 (n1124) में प्रासंगिक शब्दों §6.7.8/23 में है:

जिस क्रम में कोई साइड इफेक्ट प्रारंभ सूची भाव के बीच होते हैं अनिर्दिष्ट 131 है

फुटनोट का कहना है:

131) विशेष रूप से, मूल्यांकन आदेश subobject आरंभीकरण के आदेश के रूप में ही होने की जरूरत नहीं।

+0

मुझे फुटनोट 131 के अतिरिक्त पसंद आया (और इसके लिए वोट दिया गया), लेकिन मैं पुराने जवाब के साथ गया क्योंकि मैंने सोचा कि दोनों पूर्ण थे। –

+0

क्या इसका मतलब यह है कि विभिन्न तत्वों से जुड़े अभिव्यक्तियों का मूल्यांकन ओवरलैप न करने की गारंटी है, लेकिन किसी भी विशेष मूल्यांकन के समय के बीच इस तरह के अभिव्यक्तियों का मूल्यांकन किया जा सकता है और संबंधित संरचना तत्व वास्तव में लिखा गया है? – supercat

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