extesion

 

一、问题
Extern的问题在于不知道这个关键词出现的时候到底是声明还是定义?

 

二、详解
1、函数的声明extern关键词是可有可无的,因为函数本身不加修饰的话就是extern。但是引用的时候一样需要声明的。

2、全局变量在外部使用声明时,extern关键字是必须的,如果变量没有extern修饰且没有显式的初始化,同样成为变量的定义,因此此时必须加extern,而编译器在此标记存储空间在执行时加载内并初始化为0。而局部变量的声明不能有extern的修饰,且局部变量在运行时才在堆栈部分分配内存。

3、全局变量或函数本质上讲没有区别,函数名是指向函数二进制块开头处的指针。而全局变量是在函数外部声明的变量。函数名也在函数外,因此函数也是全局的。

4、谨记:声明可以多次,定义只能一次。

5、extern int i; //声明,不是定义
int i; //声明,也是定义

 

三、示例

1、代码

  1.  
    /* test.c */
  2.  
    #include <stdio.h>
  3.  
     
  4.  
    int etn = 100;
  5.  
     
  6.  
    void layout()
  7.  
    {
  8.  
    printf("test.c: The etn is %d\n", etn);
  9.  
    }
  10.  
    /* main.c */
  11.  
    #include <stdio.h>
  12.  
     
  13.  
    extern int etn;
  14.  
     
  15.  
    int main()
  16.  
    {
  17.  
    layout();
  18.  
    printf("main.c: The etn is %d\n", etn);
  19.  
    return 0;
  20.  
    }

2、运行结果

posted @ 2020-09-07 19:19  张达嘛  阅读(238)  评论(1编辑  收藏  举报