c++函数在不同的源文件中使用全局变量

C++ function in different source files with global variable

本文关键字:全局变量 源文件 函数 c++      更新时间:2023-10-16

我正在用不同的函数做c++。我想把函数放在不同的源文件中。为此,我创建了一个头文件:

function.h

int X(int i, int k);

和函数为:

的文件

function.cpp

int X(int i, int k){    
return p + (i-1)*(n-1) + (k-1);
}

和我的main:

#include "subfunction.h"
int p, n, m, num_entries, NUMROWS;
int main (int argc, char **argv){
int project = 4;
int employee = 5; 
int time = 5; 
p=project;
n=employee;
m=time;
num_entries=-1;
int row=-1;
M[num_entries].col=X(i,k); 
}

我没有把我所有的主要,只是有趣的部分。我的问题是n m p在main中是全局变量但我在函数中也使用了它们。如果我在函数中声明它,main就不再工作了,如果我在main中声明它也是一样的。

如何使用全局变量?由于

function.cpp中,将变量声明为

extern int p, n; // your function doesn't seem to need "m"

指示编译器这些变量将在其他模块中定义;在链接时,你必须将其他模块与你的函数代码一起包含,否则链接器会抱怨无法解决的外部。

然而,像这样使用全局变量并不是编写代码的好方法。重构代码,使它们成为函数参数。

如何使用全局变量?

最好的方法是将全局变量显式地传递给函数。全局变量是维护的负担,没有全局变量你的代码会更容易理解。

例如,可以这样做:

int X(int i, int k, int n, int p);

如果你需要修改全局变量的能力,通过引用传递它们:

int X(int i, int k, int& n, int& p) {
    p += 24;
    n = 42;
    ...
}

如果你的全局变量实际上是常量,将它们声明为const并将它们放在头文件中应该可以解决这个问题:

const int n = 42;

如果由于某种原因你不能这样做,在必须引用它们的模块中声明全局变量extern int p等。

function.cpp中,将全局变量声明为

extern int p, n, m;

这样编译器就知道它在别处定义了。我同意上面的答案,像这样使用全局变量被认为是糟糕的形式,应该被重构。

声明pnextern:

extern int p;
extern int n;
int X(int i, int k){    
  return p + (i-1)*(n-1) + (k-1);
}