每个领域都会为零吗?
如果是这样,为什么C不对int使用相同的“clean to zero”方法?
答案 0 :(得分:7)
如果变量具有自动存储 - 局部变量 - 并且未明确初始化,则其状态是不确定的。无论是简单变量(例如int
)还是复杂(例如结构或联合),这都适用。
字段无法可靠归零。
C11 §6.7.9 Initialization ¶10:
如果没有显式初始化具有自动存储持续时间的对象,则其值为 不确定的。
答案 1 :(得分:1)
请注意,static
变量会自动初始化为零,包括局部静态变量。
考虑以下示例:
typedef struct
{
int alpha;
char bravo;
float charlie;
} ThreeVarStruct_T; // Define a structure
int function(void) // Local Scope
{
ThreeVarStruct_T exampleA; // This will hold uninitialized "random" data
static ThreeVarStruct_T exampleB; // This is guaranteed to be initialized to zero
}