相关疑难解决方法(0)

为什么编译器不会警告超出范围的静态数组索引?

最近,我的一位同事通过写出堆栈上的静态数组(他在不增加数组大小的情况下添加了一个元素)来严重受伤.编译器不应该捕获这种错误吗?以下代码使用gcc完全编译,即使使用-Wall -Wextra选项,但它显然是错误的:

int main(void)
{
  int a[10];
  a[13] = 3;  // oops, overwrote the return address
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我很肯定这是不确定的行为,虽然我现在找不到C99标准的摘录.但是在最简单的情况下,数组的大小称为编译时,并且索引在编译时是已知的,编译器是否应该至少发出警告?

c arrays warnings

20
推荐指数
4
解决办法
7904
查看次数

标签 统计

arrays ×1

c ×1

warnings ×1