8

通常当我们初始化一个数组时,我们可能会这样做:

int arr[] = {1, 2, 3, 4, 5};

但是可以如下明确限制数组的长度吗?:

int arr[3] = {1, 2, 3, 4, 5};

尽管编译器发出了一些警告,但可执行文件似乎没有任何问题。

4

1 回答 1

10

不,这不好。从 C99,6.7.8.2 开始:

约束

  1. 任何初始化程序都不应尝试为未包含在正在初始化的实体中的对象提供值。

在我的阅读中,这意味着提供过多的初始值设定项元素是违反约束的,因此它会调用未定义的行为。

于 2013-09-21T05:37:31.707 回答