可否申请跨文件的局部变量?该怎么解决
可否申请跨文件的局部变量?
示例:
main.cpp
c1.cpp
会出现编译错误,如果将main中的int n申请为全局变量即可编译,但不希望n有这么长的寿命,能否使得n的寿命局限在某函数内,但可被一个在函数内使用但文件外定义的函数使用?
------解决方案--------------------
把n的地址传给process即可
------解决方案--------------------
------解决方案--------------------
用命名空间。
在相关文件上用namepace定义函数及全局变量,在main文件上可以用using namespace调用,这样有命名空间的可以调度,没有使用的就无法调度。
------解决方案--------------------
你把n定义到文件作用域就行了,否则另外的模块根本链接不到n
示例:
main.cpp
- C/C++ code
int process(int k); int main() { vector <int> a; for(int i=0;i<5;i++) { int n; process(i); a.push_back(n); } }
c1.cpp
- C/C++ code
int process(int k) { extern int n; n=k; }
会出现编译错误,如果将main中的int n申请为全局变量即可编译,但不希望n有这么长的寿命,能否使得n的寿命局限在某函数内,但可被一个在函数内使用但文件外定义的函数使用?
------解决方案--------------------
把n的地址传给process即可
------解决方案--------------------
------解决方案--------------------
用命名空间。
在相关文件上用namepace定义函数及全局变量,在main文件上可以用using namespace调用,这样有命名空间的可以调度,没有使用的就无法调度。
------解决方案--------------------
你把n定义到文件作用域就行了,否则另外的模块根本链接不到n
- C/C++ code
void process(int k); int n; int main() { vector <int> a; for(int i=0;i<5;i++) { // int n; process(i); a.push_back(n); } for(int i=0;i<5;i++) { cout << a[i] << endl; } cin.get(); }
------解决方案--------------------
------解决方案--------------------
如果仅限某函数、甚至是函数某区间内,那确实是不行的,不过,你可以在process上做文章,即外部变量参数化:
- C/C++ code
int process(int k,int *n=NULL) { if(!n)return -1; //failed *n = k; return 0; } int main() { vector <int> a; for(int i=0;i<5;i++) { int n; process(i,&n); a.push_back(n); } .... }