c - 在数组初始值设定项列表中提供的初始值设定项是否多于数组中的元素是语法错误吗?

标签 c arrays

有人告诉我这是真的(在 pearson 的 How to Program 一书中),但是在 NetBeans 的 ide 中编译时,

下面的函数代码

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

不会导致编译时错误,但会在程序中进一步导致意外行为。访问数组中不应存在的位置也不会导致语法错误。

printf("%d", n[7]);

我错过了什么吗?

最佳答案

是的,这段代码是错误的:

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

根据 6.7.9 初始化the C standard 的第 2 段:

Constraints

No initializer shall attempt to provide a value for an object not contained within the entity being initialized.

正如评论中所指出的,这是一个约束冲突和一个必须由编译器报告的语义错误。我会说任何未能报告此错误的编译器都有缺陷。

关于c - 在数组初始值设定项列表中提供的初始值设定项是否多于数组中的元素是语法错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46146712/

相关文章:

c - 是否有可能在 C 中实现无限编译时间(即没有模板)?

javascript - 如何使用 HTML 中的本地存储将数据存储在数组中?

c - 指向数组的指针与数组具有相同的值

javascript - 如何使 javascript 显示随机名称而不重复?

c - 如何执行 shell 脚本或可执行文件?

c - Malloc 和双重发行

java - 二分查找帮助 : Reading File into Array, 查找特定行

c - 如何检查整数数组是否全为零?

c - 双自动舍入

c - 将 char* 添加到链表不起作用