C инициализация структуры с переменной
Я столкнулся с проблемой, которая, кажется, не была решена ни одним из стандартов C после C89, за исключением упоминания о том, что были сняты ограничения инициализации структур. Однако я столкнулся с ошибкой, используя Open Watcom IDE (для отладки), где компилятор утверждает, что инициализатор должен быть постоянным выражением.
Вот суть того, что происходит.
typedef struct{
short x;
short y;
} POINT;
void foo( short x, short y )
{
POINT here = { x, y }; /* <-- This is generating the error for the compiler */
/* ... */
}
Есть идеи, почему или какой стандарт запрещает это?
3 ответа:
Следующая цитата взята из обоснования C99:
Комитет С89 рассмотрел предложения о разрешении автоматического агрегатные инициализаторы, состоящие из заключенного в скобки ряда произвольные выражения времени выполнения, а не только те, которые можно использовать для статический инициализатор времени трансляции. Вместо того, чтобы определить набор правила, которые бы избегали патологических случаев и все же не казались слишком произвольно, комитет С89 решил разрешить только статические инициализаторы. Это было пересмотрено, и выражения времени выполнения являются действителен в C99.