Все в поднятом ответе может быть точным, но оно танцует вокруг корня вашего вопроса.Вы абсолютно правы - на образах Debian и Alpine Docker, и вызов gcc, который не включает -pedantic
, компилирует и запускает его без жалоб:
root@45c9da7956c8:/# cat t.c; gcc -std=c11 -o t t.c && ./t;
#include <stdio.h>
typedef struct{
int i;
int tab[];
}mystr;
mystr a = {1,{0,1,2}};
int main(void){
printf("%d%d%d\n",a.i,a.tab[0],a.tab[1]);
return 0;
}
101
Gcc - очень удобный компилятор,и будет работать с вещами, которые могут быть точно описаны как не соответствующие спецификации.Это не обязательно делает его плохим компилятором - но это делает его плохим тестом на соответствие кода стандартам.-pedantic
поможет с этим.
Я повторю замечание, высказанное в комментариях к вопросу, что в концептуальном отношении лучше всего думать о C и C ++ как о совершенно разных языках.По крайней мере, я не могу вспомнить случай, когда получение кода C для компиляции на компиляторе c ++ имело бы какое-либо значение.Думая о них как о совершенно отдельном, это верная модель того, как они действуют в реальной жизни.