标识符的作用域--程序级>文件级>类级>函数级>块级

来源:互联网 发布:软件方案怎么写 编辑:程序博客网 时间: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为外部变量,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的作用于开始

// 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的作用域结束
// error: i的作用域仅限于if语句内。





//  int型 i 的作用域在此开始,到此结束


//  double型 i 的作用域在此开始,到此结束




// i的作用于开始





// i的作用域结束
// error: i的作用域仅限于switch语句内。 



原创粉丝点击