gpt4 book ai didi

c - 为什么声明后的初始化需要数据类型?

转载 作者:太空狗 更新时间:2023-10-29 17:13:14 26 4
gpt4 key购买 nike

考虑简单的 C 程序:

int a;      // declaration
int a = 11; // initialization

int main(int argc, char* argv[]) {
int b; // declaration
b = 10; // assignment

如果 a 的初始化没有写入数据类型,例如 a = 11,编译器会发出警告。为什么 a 的初始化需要一个数据类型,而 a 的声明已经指定了它的数据类型?

最佳答案

int a 在文件范围内是一个“暂定”定义(因为它缺少初始化部分)。这意味着 a 可以在以后用一个值再次定义。

暂定定义可以作为定义,也可以不作为定义,这取决于翻译单元中其前后是否存在实际的外部定义:

int a = 5; // defines a in the current translation unit with external linkage and a value of 5
int a; // tentative definition with no effect (a is already defined)

相反的方式通常更实用:

int a;
...
int a = 5;

暂定定义可以先于实际定义,例如,如果用于初始化它的常量在第一点不可用。

编辑:

您似乎对无法在文件范围内执行赋值感到困惑。 C 程序只允许在函数内进行实际操作。在文件范围内,只能定义或声明变量、类型和函数。

关于c - 为什么声明后的初始化需要数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37325200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com