gpt4 book ai didi

c - 其他文件中的外部变量定义

转载 作者:太空宇宙 更新时间:2023-11-04 10:46:31 25 4
gpt4 key购买 nike

您好,我有以下 2 个文件在 a.c 我有

#include <stdio.h>

int i;
static int j;
int main()
{
printf("i = %d\n",i);
printf("j = %d\n",j);
return 0;
}

b.c 我有

#include <stdio.h>

extern int i=2;
extern int j=5;

在这个例子中,当我运行时,我得到的答案是 2,0,但编译器抛出警告 initialized and declared ‘extern’ for both variables.

b.c 如何能够访问 j 而不会抛出错误,因为 j 的范围仅适用于 a.c

最佳答案

首先,在将变量声明为 extern 的同时初始化一个变量没有任何意义。这就是您收到编译器警告的原因。如果变量在文件范围内,C 允许它,但一如既往,C 允许很多不好的事情。

另请注意,使用 extern 几乎总是不好的做法,应该避免。

现在对于代码,i 的行为符合预期,因为两个文件中的 i 都引用相同的变量。另一方面,jstatic,因此该变量的范围缩小到本地文件。标准中有一条规则说,所有静态变量都必须初始化为 0,除非程序员明确地初始化它们。所以 j 的值将为 0。

由于 j 是静态的,extern int j; 指的是“其他地方的另一个 j”,因为没有可见的 j 变量你写外部文件的文件。由于程序未使用“其他地方的另一个 j”,因此该变量将被简单地丢弃。

staticextern 在很多方面都是彼此相反的。如果您认为将同一个变量同时声明为 static 和 extern 是有意义的,则需要更多地研究 static 关键字。

关于c - 其他文件中的外部变量定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32864590/

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