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

标签 c linux static extern

您好,我有以下 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/

相关文章:

c - realloc() 结构数组的旧大小无效

c - 如何从c中的较大字符串中获取子字符串?

python - 尝试在需要它的 python 脚本中定义 DJANGO_SETTINGS_MODULE 时出现错误

linux - 如何使用 'sort' 按第一列文本排序,然后按第二列数字排序?

c - 错误: too few arguments to function 'set_new_node'

C 回调 - 可选参数?

linux - 等待队列与 Linux 中的信号量

c++ - 将函数定义放在头文件中

java - 将初始值设置为静态字段

django - django 中无法加载静态文件