47
A
回答
28
多余的元素被忽略。有两部分6.7.8初始化你关心的。首先,从第17段开始:
每个大括号包含的初始化程序列表都有一个关联的当前对象。如果没有指定,则根据当前对象的类型对当前对象的子对象进行初始化:按照下标顺序递增的数组元素,按声明顺序的结构成员以及联合的第一个已命名成员。
这一个解释了为什么你会得到1,7和9 - 当前对象由大括号设置。那么,为什么它不关心群众演员,从第20段:
...只有从列表中足够的初始化被带到占子聚集的元素或成员或的第一个成员包含工会;任何剩余的初始化器都将初始化当前的子聚集或包含的联合所属的聚合的下一个元素或成员。
2
int a[3] = { { {1, 2}, {3, 4}, 5, 6 }, {7, 8}, {9}, 10 };
是无效的。
正是出于同样的原因int b[1] = {1, 2};
无效是无效的:因为C99说
(C99,6.7.8p1)“没有初始化将试图提供没有包含的实体中的对象的值初始化“。
的最后一个元素10
在a
初始化试图提供不包含在所述实体被初始化的对象的值。
+0
我希望听到关于您引用的参考文献所提出的不同论断以及卡尔引用的第二个参考文献的良好辩论。似乎是标准中的一个明显冲突,这可能会导致编译器实现方面的差异,直到解决问题。 +1指出差异。 – ryyker 2014-06-18 19:23:00
相关问题
- 1. 为什么这个有效的代码?
- 2. 为什么这个有效的Python?
- 3. 这为什么有效?
- 4. Jquery。为什么这有效?
- 5. 为什么这个Prolog谓词有效?
- 6. 为什么不是这个XHTML有效?
- 7. 为什么这个TableView代码有效?
- 8. Java:为什么这个子类有效?
- 9. 为什么这个语法有效?
- 10. 这个程序为什么有效?
- 11. 这个源代码为什么有效?
- 12. 为什么这个JavaScript有效?
- 13. 为什么这个有效?返回在C++常量引用
- 14. 内存分配:为什么这个C程序有效?
- 15. 这为什么有效? (sameAs的VS ==)
- 16. 为什么这个有效的JSON字符串不会生效?
- 17. 为什么这个有效的C? ---({123;})的计算结果为123
- 18. 为什么这个XUL代码有效并且Javascript等效不?
- 19. 这为什么有效? (HTML + PHP)
- 20. 这为什么有效? JNDI,Tomcat6
- 21. 什么是int(a)(1)?这是一个有效的c + +语法?
- 22. 为什么这个查询无效?
- 23. 为什么在这个SCSS无效性
- 24. 为什么这个XSL模板无效?
- 25. 为什么这个percolator查询无效?
- 26. 为什么这个JSON“无效?”
- 27. 为什么这个GUID无效?
- 28. 为什么这个django ModelForm无效?
- 29. 为什么这个HQL无效?
- 30. 这个SQL为什么有效? (我不认为它应该!)
+1,真是有趣。 – ApprenticeHacker 2012-03-20 17:50:11
使用gcc我得到24个警告。很好的问题。我活着学习:-) – gbulmer 2012-03-20 18:56:47
Yay gcc!至少你会收到警告。 – boatcoder 2012-03-30 14:15:20