是否有一个非常早期的C“标准”,其中以下对于二维数组的定义是合法的?
int array[const_x, const_y];
int array2[2, 10];
我偶然发现了一些旧的遗留代码,它使用了这个(并且只有这个)符号来表示多维数组。代码是,除了这个奇怪的,完全有效的C(并且令人惊讶地设计得很好)。
由于我没有找到任何在[,]
和[][]
之间转换的宏,我认为它不是一种恶作剧的形式,似乎曾经有过你的旧约C接受这种表示法的编译器。或者我错过了什么?
编辑:如果有帮助,那就是嵌入式微控制器(atmel)。根据我的经验,嵌入式编译器并不是标准合规性的着名。
如果我将所有[,]
更改为[][]
,则当前编译器上的代码按预期工作(只要可以从函数名称,描述和变量中猜出)。
答案 0 :(得分:5)
逗号运算符评估左侧,丢弃 结果,然后评估右侧。因此“2,5”是相同的 为“5”,“5,2”与“2”相同。
这可能是正在发生的事情,虽然它的原因超出了我的范围。
请注意,逗号不能用于索引多维数组:代码A [i,j]在丢弃i的情况下求值为A [j],而不是正确的A [i] [j]。这与Pascal中的语法不同,其中A [i,j]是正确的,并且可能是错误的来源。
答案 1 :(得分:5)
第一个正式标准是ANSI X3.159-1989,第一个非正式标准通常被认为是第一版的Kernighan&里奇。这些都不允许使用逗号来声明二维数组。
它似乎是您的特定编译器的特性(一种使其符合非标准的编译器,因为它会改变某些符合程序的语义)。