标识符的作用域--程序级>文件级>类级>函数级>块级
来源:互联网 发布:软件方案怎么写 编辑:程序博客网 时间:2024/05/17 23:12
作用域的种类可分为五种,从大到小分别为:程序级>文件级>类级>函数级>块级
作用域
(外部函数一般指的是带extern限定符的函数,一般函数默认extern,之所以叫外部函数,是指该函数可以在该文件外被其他文件的函数所调用)******file1.cpp******
int a=0;
void fn1();
void main (){
// to do
}
******file2.cpp******
void fn2(){
a=1;
fn1();
}
// a作用域为程序级,那么在该程序的 file2.cpp文件中可以被引用,fn1()同理也可以文件级外部静态变量,外部静态对象和内部函数,宏
(内部函数即是静态函数,之所以叫内部函数,是指该函数只可以在该文件内被其它函数所调用)******file1.cpp******
#define MAX(a,b) ((a)>(b))?a:b
int static a;
static void fn1();
void fn3();
void main (){
// to do
}
static void fn1(){
// to do
}
void fn3(){
fn1();
}
******file2.cpp******
void fn2(){
MAX(1,2);
a=1;
fn1();
fn3();
}
// 宏定义的MAX(a,b)作用域为文件级
// a为外部静态变量,fn1()为内部函数(静态函数),作用域均为文件级
//fn3()为外部函数,作用域为程序级
//通过fn3调用fn1();
// MAX()的作用域为文件级,不可以在file2.cpp中被引用
// error: a的作用域为文件级(file1.cpp),那么在文件file2.cpp中不可以被引用,同理fn1也不可以。
// 正确:fn3()作用域为程序级,可以再这里被引用,这时候通过fn3()调用了文件级的fn1()也是可以的。类级类中私有成员******file1.cpp******
public class C1{
private int a;
}
C1 c1= new C1();
c1.a=1;
// a为类C1私有成员,作用域仅仅限于类C1中,为类级
// a的作用域为类级,在这里不可以被引用函数级形参,函数体内定义的某些自动类变量或对象,内部静态变量或内部静态对象,语句标号void fn(int x){
int y;
}// x的作用域开始
// y的作用于开始
if(int i=5){
// to do
}
else{}
cout << i <<endl;
}
void fn(int n){
if(n>5){
int i=n;
}
else{
double i=n;
}
}
void fn(){
switch(int i=fn1()){
case 1:
cout<< i ;
case 2:
.....
}
cout << i<<endl;
}
// i的作用于开始
// error: i的作用域仅限于if语句内。
// int型 i 的作用域在此开始,到此结束
// double型 i 的作用域在此开始,到此结束
标识符
举例注释程序级外部变量,外部对象和外部函数(外部函数一般指的是带extern限定符的函数,一般函数默认extern,之所以叫外部函数,是指该函数可以在该文件外被其他文件的函数所调用)******file1.cpp******
int a=0;
void fn1();
void main (){
// to do
}
******file2.cpp******
void fn2(){
a=1;
fn1();
}
一个程序可以有多个文件,那么程序级的作用域可以被多个文件所引用
// a为外部变量,fn1为外部函数,作用域均为程序级
(内部函数即是静态函数,之所以叫内部函数,是指该函数只可以在该文件内被其它函数所调用)******file1.cpp******
#define MAX(a,b) ((a)>(b))?a:b
int static a;
static void fn1();
void fn3();
void main (){
// to do
}
static void fn1(){
// to do
}
void fn3(){
fn1();
}
******file2.cpp******
void fn2(){
MAX(1,2);
a=1;
fn1();
fn3();
}
// 宏定义的MAX(a,b)作用域为文件级
// a为外部静态变量,fn1()为内部函数(静态函数),作用域均为文件级
//fn3()为外部函数,作用域为程序级
//通过fn3调用fn1();
// MAX()的作用域为文件级,不可以在file2.cpp中被引用
// error: a的作用域为文件级(file1.cpp),那么在文件file2.cpp中不可以被引用,同理fn1也不可以。
// 正确:fn3()作用域为程序级,可以再这里被引用,这时候通过fn3()调用了文件级的fn1()也是可以的。类级类中私有成员******file1.cpp******
public class C1{
private int a;
}
C1 c1= new C1();
c1.a=1;
// a为类C1私有成员,作用域仅仅限于类C1中,为类级
// a的作用域为类级,在这里不可以被引用函数级形参,函数体内定义的某些自动类变量或对象,内部静态变量或内部静态对象,语句标号void fn(int x){
int y;
}// x的作用域开始
// y的作用于开始
// x,y的作用域结束
块级分程序,if语句,switch语句,循环语句中的自动类和内部静态变量或对象。void fn(){if(int i=5){
// to do
}
else{}
cout << i <<endl;
}
void fn(int n){
if(n>5){
int i=n;
}
else{
double i=n;
}
}
void fn(){
switch(int i=fn1()){
case 1:
cout<< i ;
case 2:
.....
}
cout << i<<endl;
}
// i的作用于开始
// i的作用域结束
// int型 i 的作用域在此开始,到此结束
// double型 i 的作用域在此开始,到此结束
// i的作用于开始
// error: i的作用域仅限于switch语句内。
// i的作用域结束
- 标识符的作用域--程序级>文件级>类级>函数级>块级
- js的函数作用域跟块级作用域
- 函数表达式模仿块级作用域
- 函数表达式---模仿块级作用域
- 块级作用域
- 块级作用域
- 块级作用域
- 块级作用域
- 块级作用域
- 函数作用域和块级作用域?
- 127 函数作用域 块级作用域
- JavaScript块级作用域与函数作用域
- 函数声明,函数表达式,块级作用域小结
- js的块级作用域问题
- JS的模仿块级作用域
- 没有块级作用域的javascript...
- ES6的块级作用域--读书笔记
- 关于javascript的块级作用域
- HTML中小meta
- Flash发布iOS应用全攻略(一)——如何在Flash里发布iOS应用
- C#.net中使用Opencv
- hdu 1863 畅通工程prim算法
- C++_多继承与虚基类
- 标识符的作用域--程序级>文件级>类级>函数级>块级
- 揭示宇宙奥秘的13个常数
- jQuery提升性能技巧及个人总结
- 关于DESTDIR
- POJ 1035 Spell checker
- jquery在FF下设定回车事件
- C语言笔记流程控制
- sfo的新建权限问题
- struct clk *clk_get(struct device *dev, const char *id)