Следующий простой код приводит к ошибке в 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
. Я просто вызываю неопределенное поведение или что-то в стандарте изменилось, что позволяет коду работать под C99? Почему происходит сбой под C89?