gpt4 book ai didi

c - 多个文件中的 Extern 和可能的双重定义

转载 作者:太空狗 更新时间:2023-10-29 16:48:37 24 4
gpt4 key购买 nike

我正在运行以下编译在一起的代码:gcc A.c B.c -o combined

程序A:

#include<stdio.h>
int a=1;
int b;
int main()
{
extern int a,b;
fun();
printf("%d %d\n",a,b);
}

程序 B:

int a;
int b=2;
int fun()
{
printf("%d %d\n",a,b);
return 0;
}

在运行“组合”程序时,输出为:

1 2
1 2

现在,我对此有一些疑问:

  1. 为什么不是输出:

    0 2

    1 0

  2. a和b不是定义了两次吗?

请解释清楚这些,我在理解 extern 时遇到了很多问题,其中很少有这些疑问不时出现。

提前致谢。

最佳答案

一个变量可以声明多次,只要声明彼此一致并与定义一致即可。它可能在许多模块中声明,包括定义它的模块,甚至在同一个模块中多次声明。

外部变量也可以在函数内部声明。在这种情况下必须使用 extern 关键字,否则编译器会认为它是局部变量的定义,具有不同的作用域、生命周期和初始值。此声明仅在函数内部可见,而不是在整个函数的模块中可见。

现在让我再次重复 extern 的定义,它说“外部变量是一个变量 DEFINED 在任何功能 block 之外”(请仔细阅读 BOLD 中给出的词)。所以对于 Programe A a有定义但b只是声明,所以 extern 将查找它在 Programe B 中给出的 'b' 的定义。 .So 从 Programe A 打印是1 2 .现在让我们谈谈Programe Ba 的声明和 b 的定义所以它的价格是a来自 programe Ab 的值来自当前文件。

关于c - 多个文件中的 Extern 和可能的双重定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17397677/

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