用变量进行C结构初始化

Cal*_*ner 3 c variables structure initialization

我遇到了C89之后似乎没有通过任何C标准解决的问题,除非提到结构初始化限制已被解除.但是,我使用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 */

 /* ... */

}
Run Code Online (Sandbox Code Playgroud)

任何想法为什么,或什么标准不允许?

Omr*_*rel 6

以下引用来自C99理由:

C89委员会考虑了允许自动聚合初始值设定项由括号括起来的一系列任意执行时表达式组成的提议,而不仅仅是那些可用于转换时静态初始化程序的表达式.C89委员会选择只允许静态初始化程序,而不是确定一套可以避免病态情况但又不是过于武断的规则.这被重新考虑,执行时表达式在C99中有效.