Esiste un punto di sequenza tra le espressioni di inizializzazione dei membri della struttura?Esiste un punto di sequenza tra le inizializzazioni dei membri della struttura?
Ad esempio, è ben definito che il codice qui sotto stamperà sempre "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;
}
Mi è piaciuto (e ho votato per) l'aggiunta della nota 131, ma sono andato con la risposta più vecchia perché pensavo che entrambi fossero completi. –
Ciò significa che la valutazione delle espressioni associate a diversi elementi è garantita non per sovrapporsi, ma che qualsiasi numero di tali espressioni può essere valutato tra il momento in cui un particolare viene valutato e l'elemento struttura corrispondente viene effettivamente scritto? – supercat