gpt4 book ai didi

在其他文件中初始化的外部变量的编译错误

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

我有这两个不同的程序,我想从program2 访问program1 中声明的静态变量。

程序1。 ( /* 文件 a.c */)

#include<stdio.h>    

static int a = 100; /* global static variable not visible outside this file.*/
int *b = &a; /* global int pointer, pointing to global static*/

程序2

#include<stdio.h>
/* file b.c */
extern int *b; /* only declaration, b is defined in other file.*/

int main()
{
printf("%d\n",*b); /* dereferencing b will give the value of variable a in file a.c */
return 0;
}

当我编译program1,gcc a.c时,没有编译错误,但是当我编译program2(gcc b.c)时,我收到编译错误。

test_b.c:(.text+0x7): undefined reference to `b'
collect2: error: ld returned 1 exit status

为什么会出现编译错误?这是节目链接static

提前致谢。

编辑 1:

我打算使用其他程序中的静态变量。我认为每个 .c 程序都必须有 main() 函数,并且只有 .h 程序有声明,在这一点上我错了。因此,我从 a.c 程序中删除 main() 函数,而不是分别编译两个不同的程序,现在我根据 Filip 的建议,使用 gcc a.c b.c 仅编译一次。现在一切正常。谢谢大家。

最佳答案

编译 b.c 时,您必须链接到 a.c:

gcc a.c b.c

您不能指望链接器神奇地找到定义 b 的 C 文件。 extern 意味着它是在其他地方定义的 - 你必须说出在哪里。通过使用 a.c 进行编译和链接,链接器现在可以找到 b 的声明。

当然,您不能有 2 个 main() 函数。

关于在其他文件中初始化的外部变量的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21606225/

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