⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 codetc12.dat

📁 是关于汇编指令的一个小字典,用起来很舒服,对初学者应该有些帮助的
💻 DAT
字号:
extern  声明外部变量
  
  外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量的定义处开始到本程序文件的末尾.在此作用域内,全局变量可以为程序各个函数所引用.编译时将外部变量分配在静态存储区内.
  有时需要用extern来声明外部变量,以扩展外部变量的作用域.
  1. 在一个文件内声明外部变量

     如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了.如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量  作"外部变量声明".表示该变量是一个已经定义的外部变量.例如:
     用extern声明外部变量,扩展程序文件中的作用域.
     int max(int x,int y)          /* 定义max函数 */
     {
        int z;
        z=x>y? x:y;
        return(z);
     }
     main()
     {
        extern A,B;                /*外部变量声明 */
        printf("%d",max(A,B);
     }
     int A=13,b=-8;                /*定义外部变量 */

     运行结果:    13
     
     在本程序文件的最后 1行定义了外部变量A,B,但由于外部变量定义的位置在函数main之后,因此本来在main函数中不能引用外部变量A和B.现在我们在main函数的第 2行   用extern对A和B进行"外部变量声明",表示A和B是已经定义的外部变量.这样在main函数中就可以合法地使用全局变量A和B了.如果不作extern声明,编译时出错,系统不会认  为A和B是已定义的外部变量.一般做法是外部变量的定义放在引用它的所有函数这前,这样可以避免在函数中多加一个extern声明.
     用extern声明外部变量时,类型名可以写也可以省写.例如上例中的"extern int A;"也可以写成:"extern A;".

  2. 在多个文件的程序中声明外部变量
   
     一个C程序可以由一个或多个源程序文件组成.如果程序只由一个源文件组成,使用外部变量的方法前面已经介绍.如果程序由多个源文件组成,那么在一个文件中想引用另  一个文件已定义的外部变量,有什么办法呢?
     如果一个程序包含两个文件,在两个文件中都要用到同一个外部变量NUM,不能分别在两个文件中各自定义一个外部变量NUM,否则在进行程序的连接时会出现"重复定义"的  错误.正确的做法是:在任一个文件中定义外部变量NUM,而在另一个文件中用extern对NNUM作"外部变量声明".即 extern NUM;在编译和连接时,系统会由此知道NUM是一个已  在别处定义的外部变量,并将在另一文件中定义的外部变量的作用域扩展到本文件,在本文件中可以合法地引用外部变量NUM.
     下面举一个简单的例子来说明这种引用.
     例题:用extern将外部变量的作用域扩展到其他文件.
     本程序的作用是给定b的值,输入a和m,求a*b和a的m次方的值.
     文件file1.c中的内容为:
     int A;                 /* 定义外部变量 */
     main()
     {
        int power(int);     /* 对调用函数作声明 */
        int b=3,c,d,m;
        printf("Enter the number a and its power m: \n");
        scanf("%d,%d",&A,&m);
        c=A*b;
        printf("%d * %d = %d\n",A,b,c);
        d=power(m);
        printf("%d * * %d=%d",A,m,d);
      }
   
     文件file2.c中的内容为:
     extern A;              /* 声明A为一个已定义的外部变量 */
     power(int n);
     {
        int i,y=1;
        for(i=1;i<=n;i++)
          y*=A;
        return(y);
      }
     可以看到,file2.c文件中的开头有一个extern声明,它声明在本文件中出现的变量A是一个已经在其他文件中定义过的外部变量,本文件不必在为它分配内存.本来外部变  量A的作用域是file1.c,但现在用extern声明将其作用域扩大到file2.c文件.假如程序有5个源文件,在一个文件中定义外部整型变量A,其他4个文件都可以引用A,但必须在  每一个文件中都加上一个extern A;声明.在各文件经过编译后,将各目标文件联接成一个可执行的目标文件.但是用这样的全局变量应十分慎重,因为在执行一个文件中的函数  时,可能会改变了该全局变量的值,它会影响到另一个文件中的函数执行结果.
     有的读者可能会问:extern既可以用来扩展外部变量在本文件中的作用域,又可以使外部变量的作用域从一个文件扩展到其他文件,那么系统怎么区别处理呢?实际上,在编  译时遇到extern时,先在本文件中找外部变量的定义,如果找到,就在本文件中扩展作用域.如是找不到,不在连接时从其他文件中找外部变量的定义,如果找到,就将作用域扩展  到本文件,如果找不到,按出错外理.

  3. 用static声明外部变量
     
     有时在程序设计中希望某些外部变量只限于被本文件引用,而不能被其他文件引用.这时可以在定义外部变量时加上一个static声明.例如:
            file1.c                            file2.c
            static int A;                      extern int A;
            main()                             fun(int n)
            {                                  {
               .                                 A=A*n;
               .                                 .
               .                                 .
             }                                  }
     在file1.c中定义了一个全局变量A,但它用static声明,因此只能用于本文件,虽然在file2.c文件中用了extern int A;但file2.c文件中无法使用file1.c中的全局变  量A.这种加上static声明,只能用于本文件的外部变量(全局变量)称为静态外部变量,在程序设计中,常由若干人分别完成各个模块,各人可以独立地在其设计的文件中使用相  同的外部变量名而互不相干.只需在每个文件中的外部变量前加上static即可.这就为程序的模块化,通用性提供方便.如果已知道其他文件不引用本文件的外部变量,可以对本  文件中的外部变量都加上static,成为静态外部变量,以免被其他文件误用.
     需要指出对外部变量加static声明,并不意味着这时才是静态存储(存放在静态存储区中),而不加static的是动态存储(存放在动态存储区中).两种形式的外部变量都是静态存储方式,只是作用范围不同而已,都是在编译时分配内存的.
     
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -