2
A
回答
6
在所有編譯器中。這由C標準和C++標準保證。
例如,對於C這裏是有關段落:
(C99,6.7.8p21)「如果有在大括號內的列表更少初始化值多於一個聚合的元件或部件,或用於初始化已知大小的數組的字符串字符串中的字符數,而不是數組中的元素,聚合的其餘部分應隱式地初始化爲具有靜態存儲持續時間的對象。
和
(C99,6.7.8p10)「如果具有自動存儲持續時間的對象沒有被明確初始化,它的值是不確定的。如果具有靜態存儲持續時間的對象沒有被初始化明確,則:[...],如果它有算術類型,它被初始化爲(正或無符號的)零; [...]」
1
如果陣列恰好是陣列結構,你會很快遇到問題。哎呀,你甚至不能做一個單一的結構。
這個簡單的示例說明兩個主要編譯器(GCC和MSVC)不按照規格在ouah的回答引用(GCC 貌似,從它的警告,並從其錯誤味精MSVC)。
考慮這個源,foo.c的/ Foo.cpp中:
void foo(void) {
struct A {
int i;
int j;
};
struct A single = {0};
}
編譯,與兩個gcc和g ++:
$ gcc -Wall -W -c foo.c
foo.c: In function 'foo':
foo.c:6:14: warning: missing initializer
foo.c:6:14: warning: (near initialization for 'single.j')
$ g++ -Wall -W -c foo.cpp
foo.cpp: In function 'void foo()':
foo.cpp:6:27: warning: missing initializer for member 'foo()::A::j'
相同的警告給予陣列。這個gcc只有兩歲:gcc --version
- >gcc (GCC) 4.5.3
。
Plain {}
沒有在gcc中正常工作,包括陣列。並且您始終可以使用-w
(小寫)進行編譯以禁用所有警告。
但是MSVS 2012具有相等且相反的問題此實例(包括數組)。
它喜歡{0},
和治療{}
爲錯誤:
Error C2059: syntax error : '}'
相關問題
- 1. 初始化數組時初始化System.AccessViolationException
- 2. 用數組或初始化初始化一個NSMutableArray初始化
- 3. 數組初始化
- 4. 數組初始化
- 5. 初始化數組
- 6. 數組初始化
- 7. std ::數組初始化列表在初始化列表中初始化
- 8. 初始化數組的值
- 9. 數組初始化的「新」
- 10. 的CoffeeScript - 數組初始化
- 11. 初始化數組的數組
- 12. 初始化HashSet的數組中的Java
- 13. 初始化結構中的數組的
- 14. 初始化數組元
- 15. 初始化javascript數組
- 16. 從數組初始化Func
- 17. 數組初始化Java
- 18. 結構數組初始化
- 19. php數組初始化
- 20. 靜態初始化數組?
- 21. C#初始化數組
- 22. f#:初始化數組
- 23. 初始化指針數組
- 24. 二維數組初始化
- 25. ASP.NET初始化數組
- 26. 初始化int數組
- 27. 初始化字符數組
- 28. Java數組初始化
- 29. C數組初始化
- 30. 字符數組初始化
這是一樣的'= {}',但不一樣'= {1}'或其他任何這是不是零。 –