可否申请跨文件的局部变量?该怎么解决
可否申请跨文件的局部变量?示例:main.cppC/C++ codeint process(int k)int main(){vector int afor(in
可否申请跨文件的局部变量?
示例:
main.cpp
C/C++ codeint 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++ codeint process(int k){ extern int n; n=k;}
会出现编译错误,如果将main中的int n申请为全局变量即可编译,但不希望n有这么长的寿命,能否使得n的寿命局限在某函数内,但可被一个在函数内使用但文件外定义的函数使用?
[解决办法]把n的地址传给process即可
[解决办法][解决办法]用命名空间。
在相关文件上用namepace定义函数及全局变量,在main文件上可以用using namespace调用,这样有命名空间的可以调度,没有使用的就无法调度。
[解决办法]你把n定义到文件作用域就行了,否则另外的模块根本链接不到n
C/C++ codevoid 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++ codeint 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); } ....}