在C中初始化数组

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

例如:

int arr[10] = {3}; 

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

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

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

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

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

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

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

无论您使用哪种编译器,这都应该有效。

如果你想确保你的代码适用于所有编译器,你应该像它一样初始化所有的数组元素:

 int arr[10] = {3,0,0,0,0,0,0,0,0,0}; 

如果数组的元素数量太高(100或10000),则最好的解决方案是在运行时动态初始化它。

它取决于编译器的设计。 通常编译器支持它,有些可能在编译或其他选项期间通过一些标志支持。 有些人可能不支持它。 最好与相关的编译器支持regd检查与C标准的兼容性。 我认为Code Composer Studio IDE(TI DSP处理器)支持小组可能会给您准确的答案。

Karthik Balaguru

语言规范指定默认行为,但并非所有编译器都实现定义的行为。 一个很好的例子是Visual Studio 2008是Microsoft C / C ++编译器的第一个版本,它将调用数组中未初始化元素的默认构造函数,这是至少从C ++ 98规范开始已经定义的数组初始化行为。

如果您担心代码在多个编译器上的运行方式,那么最好是安全而不是抱歉并明确初始化所有值。