-
Используя гибкие члены массива (FAM) внутри типов структуры, показываем ли мы нашим программам возможность поведения undefined?
-
Возможно ли, чтобы программа использовала FAM и все еще была строго соответствующей программе?
-
Требуется ли смещение элемента гибкого массива в конце структуры?
Вопросы относятся как к C99 (TC3)
, так и к C11 (TC1)
.
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
int main(void) {
struct s {
size_t len;
char pad;
int array[];
};
struct s *s = malloc(sizeof *s + sizeof *s->array);
printf("sizeof *s: %zu\n", sizeof *s);
printf("offsetof(struct s, array): %zu\n", offsetof(struct s, array));
s->array[0] = 0;
s->len = 1;
printf("%d\n", s->array[0]);
free(s);
return 0;
}
Вывод:
sizeof *s: 16
offsetof(struct s, array): 12
0