两种不同的输出

Par*_*ita 4 c initialization operators

 #include<stdio.h>

int main(void)
{
   static int i=i++, j=j++, k=k++;
   printf("i = %d j = %d k = %d", i, j, k);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

Turbo C 4.5的输出:

i = 0 j = 0 k = 0

在gcc我收到错误:

Initializer元素不是常量

哪一个在逻辑上是正确的?我有点困惑..

Nie*_*jou 12

标准说关于初始化(6.7.8):

4具有静态存储持续时间的对象的初始值设定项中的所有表达式应为常量表达式或字符串文字.

(这是来自C99,但C89几乎完全相同.)

因此,看起来GCC比15岁的弃用软件更正确.(谁是一个thunk吗?)