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

时间:2013-01-14 04:50:53

标签: c

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

int array[const_x, const_y];
int array2[2, 10];

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

由于我没有找到任何在[,][][]之间转换的宏,我认为它不是一种恶作剧的形式,似乎曾经有过你的旧约C接受这种表示法的编译器。或者我错过了什么?

编辑:如果有帮助,那就是嵌入式微控制器(atmel)。根据我的经验,嵌入式编译器并不是标准合规性的着名。

如果我将所有[,]更改为[][],则当前编译器上的代码按预期工作(只要可以从函数名称,描述和变量中猜出)。

2 个答案:

答案 0 :(得分:5)

看看this forum post

  

逗号运算符评估左侧,丢弃   结果,然后评估右侧。因此“2,5”是相同的   为“5”,“5,2”与“2”相同。

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

  

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

来自Wikipedia

答案 1 :(得分:5)

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

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