【发布时间】:2010-12-02 05:05:06
【问题描述】:
即使使用 -Wall 选项,这在 gcc 中编译也不会出现错误或警告 这意味着在运行时检查数组边界,因此编译器无法检测到错误
#include<stdio.h>
int main()
{
int a[2][3][4];
a[1][2][100] = 4 ;
return 0;
}
然而,
#include<stdio.h>
int main()
{
int a[2][3];
a[1][2][100] = 4 ;
return 0;
}
这会在编译为时产生错误:
$ gcc sample.c -Wall
sample.c: In function ‘main’:
sample.c:7: error: subscripted value is neither array nor pointer
为什么会这样?在这两个代码中 a[1][2][100] 都是无效的。编译器仍然如何检测到这是 code2 而不是 code1。
特别是当每个编译器都将所有多维数组扁平化为对应的一维数组时,编译器如何选择性地意识到代码中的这个缺陷。
如果有正确解释的书籍或文章的解释或提及,我们将不胜感激:)
【问题讨论】:
标签: c arrays pointers gcc compiler-construction