結構成員初始化表達式之間是否存在序列點?結構成員初始化之間是否有順序點?
例如,下面的代碼總是會打印出「a,b」嗎?
#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;
}
我喜歡(並投票贊成)增加了腳註131,但是我選擇了較舊的答案,因爲我認爲兩者都是完整的。 –
這是否意味着與不同元素相關聯的表達式的評估保證不重疊,但是任何數量的這種表達式都可以在評估任何特定元素與相應結構元素實際寫入的時間之間進行評估? – supercat