Всё время считал, что размерность массива должна быть определена на этапе компиляции. Поэтому, данный код, по идее, должен быть не валидным:
#include "stdio.h"
int foo(int x) {
return x + 5;
}
int bar() {
return 3;
}
int main(int argc, char const *argv[]) {
int x[foo(3)];
printf("%zu\n", sizeof(x));
int y = foo(3);
int ya[y];
printf("%zu\n", sizeof(ya));
int z = 3;
int zz = foo(z);
int za[zz];
printf("%zu\n", sizeof(za));
int a[foo(bar())];
printf("%zu\n", sizeof(a));
return 0;
}
Что поэтому поводу говорит стандарт? Когда так делать можно, а когда нельзя?