c++函数在不同的源文件中使用全局变量
C++ function in different source files with global variable
我正在用不同的函数做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;
这样编译器就知道它在别处定义了。我同意上面的答案,像这样使用全局变量被认为是糟糕的形式,应该被重构。
声明p
和n
为extern
:
extern int p;
extern int n;
int X(int i, int k){
return p + (i-1)*(n-1) + (k-1);
}
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 如何创建用于多个源文件的全局变量/包含/函数
- 如何从 C++ 源文件访问 C 源文件中的全局变量
- C 细分故障由全局变量在单独的源文件中引起
- 使用全局变量作为在其他源文件中分配的函数的参数
- 如何使用在源文件内的头文件中声明的全局变量
- 多个源文件中的外部全局变量未解决的链接器错误
- 为什么全局变量由另一个源文件中的类初始化
- 从C++源文件创建全局变量列表
- 如何声明和定义全局变量,以便从所有头文件/源文件中正确访问它们
- c++函数在不同的源文件中使用全局变量