考虑一个 C 结构:
struct T {
int x;
int y;
};
当它被部分初始化时
struct T t = {42};
ty 是否保证为 0 或者这是编译器的实现决定?
原文由 VoidPointer 发布,翻译遵循 CC BY-SA 4.0 许可协议
考虑一个 C 结构:
struct T {
int x;
int y;
};
当它被部分初始化时
struct T t = {42};
ty 是否保证为 0 或者这是编译器的实现决定?
原文由 VoidPointer 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果它被部分初始化,它保证为 0,就像数组初始化器一样。如果它未初始化,它将是未知的。
struct T t; // t.x, t.y will NOT be initialized to 0 (not guaranteed to)
struct T t = {42}; // t.y will be initialized to 0.
相似地:
int x[10]; // Won't be initialized.
int x[10] = {1}; // initialized to {1,0,0,...}
样本:
// a.c
struct T { int x, y };
extern void f(void*);
void partialInitialization() {
struct T t = {42};
f(&t);
}
void noInitialization() {
struct T t;
f(&t);
}
// Compile with: gcc -O2 -S a.c
// a.s:
; ...
partialInitialzation:
; ...
; movl $0, -4(%ebp) ;;;; initializes t.y to 0.
; movl $42, -8(%ebp)
; ...
noInitialization:
; ... ; Nothing related to initialization. It just allocates memory on stack.
原文由 mmx 发布,翻译遵循 CC BY-SA 2.5 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
标准草案第8.5.1.7项: