在C中初始化数组

inq*_*ive 2 c arrays embedded

在C中,我已经读过,半初始化的数组将用其余元素填充零(不管整数或char数组).

例如:

int arr[10] = {3};
Run Code Online (Sandbox Code Playgroud)

arr[4] 如果初始化则为0,如果未初始化则为垃圾值.

我的问题是,根据编译器选项,上述所有C编译器(或)的附加工作是否可能会发生或不发生?我在Code composer studio(TI的IDE)工作.我想确保这适用于所有案例和所有编译器.

小智 10

行为由C标准指定.但是,如果您担心特定编译器的行为,为什么不编写测试?

  • 如果您知道可能在代码上使用哪些编译器,那么测试是个好主意.如果您担心编译器之间的可移植性以用于将来的工作,这可能会更加困难;-). (3认同)

小智 7

这是根据C标准,任何遵循C标准的编译器都必须这样做.但是,并非所有编译器都符合100%标准,如果您不确定,则必须检查是否符合此类编程器.


qrd*_*rdl 5

位于数据段(全局和单位范围)中的变量会自动初始化为全零.

除非显式初始化,甚至部分初始化,否则堆栈变量(函数和块作用域)将填充垃圾.在部分初始化的情况下,提醒被归零.

这是C标准,所有编译器都必须遵守它.

  • 不是这样,参见C99 6.7.8/21"如果括号括起的列表中的初始值设定项少于元素或成员的数量,则余数值应与具有静态存储持续时间的对象隐式初始化." (粗略地说,意味着归零) (2认同)