gpt4 book ai didi

c - extern Short i 有什么问题;我=2; ? gcc 提示类型冲突

转载 作者:行者123 更新时间:2023-11-30 15:49:33 39 4
gpt4 key购买 nike

以下代码与问题Is there a difference between initializing a variable and assigning it a value immediately after declaration?类似两次被否决,所以我面临风险;-)

short i; 
i = 2;

它无法使用 MinGW 和 -std=c99 进行编译——为什么?第一行是标识符 i 的声明,而不是对象的定义。但是,标识符具有文件范围,因此默认情况下具有外部链接。它可以在其他地方声明和定义。第二行可以是对该对象的赋值。但是 gcc 提示缺少类型或存储类,并且在猜测类型为 int 之后,提示类型冲突。

最佳答案

您说 short i; 具有文件范围,这对我来说意味着它(编辑:以及后续的 i = 2; ) 位于函数之外。 在函数之外, i = 2; 本身就是完全无意义的;作为语句,它不能出现在函数外部。 (编辑) 由于语句不能出现在函数外部,因此“赋值”必须是定义。在旧的 C 代码中,没有存储类的定义是 int 定义,因此您的代码等效于(根据这些规则,看起来 GCC 正在应用):

short i;
int i = 2;

这对于 C 编译器来说当然完全是无稽之谈。 (编辑结束)

通过定义和初始化,您或多或少可以获得您想要的效果:

short i = 2;

如果您只想声明一个外部变量,则这不起作用;在这种情况下,请将初始化放入具有定义的文件中,或放入您的函数之一中(如下所示)。

extern short i;
int main(int argc, char **argv) { i = 2; /* more code */ }

关于c - extern Short i 有什么问题;我=2; ? gcc 提示类型冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16227206/

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