extern 声明变量找不到是这么回事

我按照书上的源程序编了连个.c用来尝试extern调用外部变量,但是不能成功,这是怎么回事

img

img

img

img

1、外部变量的声明必须在主程序文件之外的另一个文件中进行,例如在头文件或者其他源文件中进行声明。
2、外部变量的名称必须与主程序文件中的变量名称一致,否则无法正确调用。
3、在主程序文件中使用 extern 关键字声明外部变量时,不要给变量赋初值,因为该变量已经在其他文件中定义了,不需要再进行初始化。
如果您已经按照上述要求进行了声明,但仍然无法成功调用外部变量,可能存在以下几种可能性:

1、您的代码可能存在语法错误或者逻辑错误,导致程序无法正确执行。
2、您的代码可能存在链接错误,例如编译时找不到相关的库文件或者头文件。
3、您的代码可能存在编译器版本不兼容等问题,建议尝试更新编译器版本或者切换至其他编译器进行测试。

extern 是 C 语言中的一个关键字,用于声明一个全局变量或者函数,表示该变量或函数在当前文件之外已经定义。

以下是一个例子,演示了如何在一个源文件中定义一个全局变量,在另一个源文件中使用 extern 关键字来调用该变量:

文件1:global_var.c

int global_var = 10;  // 定义一个全局变量 global_var

文件2:main.c

#include <stdio.h>

extern int global_var;  // 声明一个外部全局变量 global_var

int main()
{
    printf("global_var = %d\n", global_var);  // 使用外部全局变量 global_var
    return 0;
}

在文件 global_var.c 中,我们定义了一个全局变量 global_var。在文件 main.c 中,我们使用了 extern 关键字声明了一个外部全局变量 global_var,并且在 main 函数中使用该变量打印输出。

编译和链接这两个文件,然后运行 main 函数,即可看到输出结果:

global_var = 10

因为 global_var 是全局变量,所以它可以在所有函数之外使用,包括在不同的源文件中。在 main 函数中,我们使用 extern 关键字声明了外部全局变量 global_var,这样就可以在 main 函数中使用该变量,而不需要重新定义。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7654262
  • 这篇博客也不错, 你可以看下C头文件中使用extern定义全局变量
  • 除此之外, 这篇博客: 如何使用extern在源文件之间共享变量?中的 外部 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    /*
    ** This header must not contain header guards (like <assert.h> must not).
    ** Each time it is invoked, it redefines the macros EXTERN, INITIALIZE
    ** based on whether macro DEFINE_VARIABLES is currently defined.
    */
    #undef EXTERN
    #undef INITIALIZE
    
    #ifdef DEFINE_VARIABLES
    #define EXTERN              /* nothing */
    #define INITIALIZE(...)     = __VA_ARGS__
    #else
    #define EXTERN              extern
    #define INITIALIZE(...)     /* nothing */
    #endif /* DEFINE_VARIABLES */
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^