在另一个模块中重新定义变量

时间:2014-04-22 04:20:34

标签: c++ variables module redefinition

为什么当我们在其他模块中重新定义变量时,可以将这些模块链接在一起?我已经编写了两个模块main.cppmodule.cpp,如下所示:

//--main.cpp--//
#include <stdio.h>

int main(){
    int i=5;
    printf("The value of i is %d",i);
}

//--module.cpp--//
int i=7;

现在我正在编译和链接他们与g++,如下所示:

g++ -c main.cpp
g++ -c module.coo
g++ -o bin main.o module.o

没关系。但我预计编译只会成功,而链接器会抛出像redefining varaible这样的异常。当我正在运行./bin输出时The value of i is 5

UPD:我理解如果我们将i声明为模块main.cpp的全局变量,那么链接器将抛出错误。

1 个答案:

答案 0 :(得分:1)

在函数main变量中,i是函数的局部变量。它不可见,存在于函数之外。

考虑以下示例

#include <iostream>

int i = 3;

int main()
{
   int i = 10

   std::cout << "i = " << i << std::endl;
   std::cout << "::i = " << ::i << std::endl;

   i = ::i;

   std::cout << "i = " << i << std::endl;
   std::cout << "::i = " << ::i << std::endl;

   {
        int i = 20;

        std::cout << "i = " << i << std::endl;
        std::cout << "::i = " << ::i << std::endl;
   }

   std::cout << "i = " << i << std::endl;
   std::cout << "::i = " << ::i << std::endl;
}

局部变量没有联系。