为什么当我们在其他模块中重新定义变量时,可以将这些模块链接在一起?我已经编写了两个模块main.cpp
和module.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
的全局变量,那么链接器将抛出错误。
答案 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;
}
局部变量没有联系。