c++ extern 调用函数的问题

如果文件A通过extern调用了文件B的函数fun,比如:

A:extern int fun();
B: int fun() {cout<<x<<endl;}

而变量x又是文件B的全局变量,比如:

B: int x=10;

这个时候尝试调用该函数:

A: fun();

会输出结果:10
问题是,A引入的只是fun()函数,该函数在A环境下运行的时候,从哪获知x=10啊?
如果全局变量x的定义放到A里面(B里面去掉),又会是什么情况?

A调用fun()函数,不需要知道fun()函数的依赖,fun()函数会找自己的依赖。
如果全局变量定义到A里面,fun()函数找不到自己的依赖,肯能会报错吧。

  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案:

    如果想在文件A中正确读取文件B中的全局变量x,需要在文件A中使用extern声明该变量,以确保使用的是同一个全局变量。具体的步骤如下:

    1. 在文件A中,使用extern关键字声明变量x,以便在A文件中使用。

    例如,在文件A中声明:

    extern int x;

    1. 在调用函数fun之前,需要先确保在文件A中对于变量x有合适的定义。如果变量x的定义在文件B中,则需要在文件A中使用#include指令来包含文件B的头文件,在头文件中使用extern关键字声明变量x。如果变量x定义在文件A中,则无需使用include指令。例如,在文件B的头文件中添加以下代码:

    extern int x;

    1. 在文件A中调用函数fun,并传递所需的参数。在函数fun中,变量x将被正确地引用。例如,在文件A中调用函数fun的代码如下:

    fun(...);

    需要注意的是,如果将变量x的定义从B文件中移到A文件中,将会有以下影响:

    1. 在文件A中需要添加变量x的定义。例如,在文件A中添加以下代码:

    int x = ...;

    1. 如果其他文件中需要使用变量x,则需要使用extern关键字进行声明。例如,在文件B的头文件中添加以下代码:

    extern int x;

    1. 如果变量x的值在不同的文件中发生了变化,则需要在不同的文件中进行同步更新,以避免出现不一致的情况。