作用域:C++中按照作用区域的大小,可以把作用域分为局部作用域和全局作用域
可见性:可见性是从另外一个角度(标识符引用)来看作用域的。换句话说,标识符只在作用域内可见
1. 局部作用域
#include <iostream>
using namespace std;
//作用域与可见性
int getNum(void)
{
int num = 0;
{
cout<<num<<endl; //上下级关系,这个num还是原来的父作用域中num=0
int num; //新定义了一个num,两个num不一样,这个num只在此作用域里有效
num = 1;
cout<<num<<endl;
}
return num;
}
int main()
{
cout<<getNum()<<endl;
return 0;
}
/*output:
0
1
0 */
与下面的代码进行比较:
#include <iostream>
using namespace std;
//作用域与可见性
int getNum(void)
{
int num = 0;
{
cout<<num<<endl; //一直也在没定义别的num,所以都是一个num
++num;
cout<<num<<endl;
}
return num; //这里不是0了,是改后的num = 1!
}
int main()
{
cout<<getNum()<<endl;
return 0;
}
/*output:
0
1
1 */
2. 全局作用域
#include <iostream>
using namespace std;
int gn; //全局变量
void get(int a, int b) //全局函数
{
for(gn = 0; gn<5; ++gn)
{
cout<<"la"<<endl;
}
}
int main()
{
gn = 1;
get(1, 2);
return 0;
}
3. extern
问题:在一个项目中,一个当前cpp源文件想要使用另外的cpp源文件中已经定义好一些全局变量或者全局函数(而不是把另外的cpp文件当成头文件添加到当前文件)怎么办?
办法:在当前cpp文件中重新声明要使用另外cpp中已经定义好的全局变量或者全局函数(在变量或者函数名前加extern)即可。这时变量或函数就可以冲出当前源文件,走向整个项目,实现共享,避免重复声明的效果
C++程序往往被分解为多个源文件和头文件,但是全局作用域内的变量或者函数只在单个源文件范围内可见。如果想在多个源文件中使用某个源文件定义的全局变量应该怎么办?很简单,extern关键字可以找到定义在其他源文件中的全局变量。当想使用某个已经在其他源文件中声明的全局变量或全局函数时,可以在这个源文件中对变量或者函数加上 extern 关键字进行修饰,对变量或者函数重新进行声明,表示这是一个扩展的声明。编译器会在其他源文件中查找这个变量或者函数的具体定义,从而使用同一个变量或者函数
/* global.cpp */
int total = 0; //全局变量
int add(int a, int b) //全局函数
{
return a + b;
}
==========================================================================================================================================================
/* helloworld.cpp */
/*没加global.cpp之类的头文件,加了extern对变量或函数重新声明一下,变量或函数就可以冲出当前源文件,走向整个项目 */
extern int total;
extern int add(int a, int b);
#include <iostream>
using namespace std;
int main()
{
total = add(2, 3);
cout<<total<<endl;
return 0;
}
本文探讨了C++中的作用域概念,包括局部作用域和全局作用域,并通过示例详细解释了可见性的含义。此外,还介绍了如何利用extern关键字在不同源文件间共享全局变量和函数。
1051

被折叠的 条评论
为什么被折叠?



