有人告诉我这是真的(在 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/