7

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

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

我偶然发现了一些旧的遗留代码,它使用这个(而且只有这个)符号来表示多维数组。除了这种奇怪之外,代码是完全有效的 C(并且在当时设计得非常好)。

由于我没有找到任何在[,]和之间转换的宏[][],并且我认为这不是一种恶作剧,似乎从前有一个接受这种符号的旧 C 编译器。还是我错过了什么?

编辑:如果有帮助,它适用于嵌入式微控制器(atmel)。从我的经验来看,嵌入式编译器在标准兼容性方面并不那么出名。

如果我将 all 更改[,][][].

4

2 回答 2

5

看看这个论坛帖子

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

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

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

来自维基百科

于 2013-01-14T04:53:09.020 回答
5

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

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

于 2013-01-14T05:44:14.720 回答