C90 - 在全局和函数范围内初始化数组

问题描述 投票:0回答:1

我想知道在全局范围内初始化数组的属性和在函数范围内初始化一次的属性。

让我们说:

char arr[4];

int main() {
    .....
}

这个数组中的值是什么?

这个选项有什么用处:

int main() {
    char arr[4];
    ....
}

最后一种情况与此有何不同:

int main() {
    ....
}

int func1() {
    char arr[4];
    ....
}

结果会在不同的编译器中改变吗?谢谢

c arrays ansi-c
1个回答
2
投票

在一个有礼貌的系统中,文件范围数组将初始化为全零。函数内数组的可预测性较差;机会很高,它只会继承当时堆栈中的任何scrud。

一般来说,可以安全地假设任何为桌面系统编译的现代工具链都“很有礼貌”,但如果是嵌入式系统,您可能需要自己检查bss部分是否初始化为全零。初始化是处理器(或有时是板)特定支持包的一部分,您不能总是相信它已经完成。

© www.soinside.com 2019 - 2024. All rights reserved.