Следующий простой код segfaults под gcc 4.4.4
#include<stdio.h>
typedef struct Foo Foo;
struct Foo {
char f[25];
};
Foo foo(){
Foo f = {"Hello, World!"};
return f;
}
int main(){
printf("%s\n", foo().f);
}
Изменение последней строки на
Foo f = foo(); printf("%s\n", f.f);
Прекрасно работает. Обе версии работают при компиляции с помощью -std=c99
. Я просто вызываю поведение undefined или что-то изменилось в стандарте, что позволяет коду работать под C99? Почему происходит сбой при C89?