在看u-boot代码过程中发现了一种数组的初始化方式比较有趣,因此记录下来。以下代码都是在windows下用mingw32-gcc编译器编译通过的。
1、对数组内所有值进行初始化。
const char init_arry[16] = {
[0 ... 3] = 'A',
[4] = 'B',
[5 ... 14] = 'C',
[15] = '\0'
};
2、乱序对数组内部分值进行初始化。
char init_data[] = {
[5] = 'D',
[1] = 'S',
[6] = 'H',
[0] = 'B',
[15] = 'I'
};
第2种方式仅会将已赋值的数组元素进行初始化,其它元素会保持默认值,且数组占用的空间按照标号最大的下标来计算,上面数组占用16Byte。
虽然大部分编译器在编译时会将未手动初始化的global或static类型的数组默认初始化为0,但也遇到过极少数编译器不会对默认元素进行处理,仍保持随机数的形式,所以保险起见最好是将数组或变量手动赋值。