C中的奇怪[1,2]样式数组

vsz*_*vsz 7 c

是否有一个非常早期的C"标准",其中以下对于二维数组的定义是合法的?

int array[const_x, const_y];
int array2[2, 10];
Run Code Online (Sandbox Code Playgroud)

我偶然发现了一些旧的遗留代码,它使用这个(并且只有这个)符号来表示多维数组.代码是,除了这个奇怪的,完全有效的C(并且令人惊讶地设计得很好).

由于我没有找到这之间的任意转换宏[,][][],我认为这不是恶作剧的形式,似乎从前原文作你的奥尔德C编译器,其接受了这一符号.还是我错过了什么?

编辑:如果它有帮助,它适用于嵌入式微控制器(atmel).根据我的经验,嵌入式编译器并不是标准兼容的众所周知的.

目前的编译器的代码按预期工作(只要它可以从函数的名称,描述和变量猜测),如果我改变这一切[,][][].

Kar*_*k T 5

看看这个论坛帖子.

逗号运算符评估左侧,丢弃结果,然后评估右侧.因此,"2,5"与"5"相同,"5,2"与"2"相同.

这可能是正在发生的事情,虽然它的原因超出了我的范围.

请注意,逗号不能用于索引多维数组:代码A [i,j]在丢弃i的情况下求值为A [j],而不是正确的A [i] [j].这与Pascal中的语法不同,其中A [i,j]是正确的,并且可能是错误的来源.

来自维基百科

  • @Pubby:如果它恰好是一个常量表达式,它为什么需要VLA? (2认同)

caf*_*caf 5

第一个正式标准是ANSI X3.159-1989,第一个非正式标准通常被认为是Kernighan&Ritchie的第一版.这些都不允许使用逗号来声明二维数组.

它似乎是您的特定编译器的特性(一种使其符合非标准的编译器,因为它会改变某些符合程序的语义).