可否申请跨文件的局部变量?该怎么解决

可否申请跨文件的局部变量?
示例:

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即可
------解决方案--------------------
探讨
示例:

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);
}
}

……

------解决方案--------------------
用命名空间。
在相关文件上用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();
}

------解决方案--------------------
探讨
用命名空间。
在相关文件上用namepace定义函数及全局变量,在main文件上可以用using namespace调用,这样有命名空间的可以调度,没有使用的就无法调度。

------解决方案--------------------
如果仅限某函数、甚至是函数某区间内,那确实是不行的,不过,你可以在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);
    }
 ....
}