Возвращаемая структура, содержащая массив

Следующий простой код приводит к ошибке в 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?

23
задан Mysticial 8 January 2012 в 02:11
поделиться