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

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

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

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

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

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

三、示例

1、代码

/* test.c */
#include <stdio.h>int etn = 100;void layout()
{printf("test.c: The etn is %d\n", etn);
}
/* main.c */
#include <stdio.h>extern int etn;int main()
{layout();printf("main.c: The etn is %d\n", etn);return 0;
}

2、运行结果

参考

1、extern使用方法总结!

2、C--变量的作用域、存储方式与生命周期

extern使用方法总结!相关推荐

  1. [转]extern使用方法总结

    Extern的问题在于不知道这个关键词出现的时候到底是声明还是定义.谨记:声明可以多次,定义只能一次.在使用中,要形成一种风格. 函数的声明extern关键词是可有可无的,因为函数本身不加修饰的话就是 ...

  2. extern 使用方法具体解释

    在C语言中,修饰符extern用在变量或者函数的声明前,用来说明"此变量/函数是在别处定义的.要在此处引用".(extern能够置于变量或者函数前,以标示变量或者函数的定义在别的文 ...

  3. extern使用方法总结

    1.谨记: 声明可以多次,定义只能一次. 2.函数 声明extern关键词是可有可无的,因为函数本身不加修饰的话就是extern.但是引用的时候一样需要声明的,方法1:声明放在头文件,#include ...

  4. 转【C#调用DLL的几种方法,包括C#调用C\C++\C#DLL】

    C#中dll调用方法 一.      DLL与应用程序 动态链接库(也称为DLL,即为"Dynamic Link Library"的缩写)是Microsoft Windows最重要 ...

  5. C#调用DLL的几种方法

    c#中dll调用方法 一. DLL与应用程序 动态链接库(也称为DLL,即为"Dynamic Link Library"的缩写)是Microsoft Windows最重要的组成要素 ...

  6. C# 使用DllImport 调用 native DLL的方法

    若要声明一个方法使其具有来自 DLL 导出的实现,请执行下列操作: 使用 C# 关键字 static 和 extern 声明方法. 将 DllImport 属性附加到该方法.DllImport 属性允 ...

  7. C#直接使用DllImport外部Dll的方法

    C#.Net调用基本格式: [DLLImport("DLL文件路径")] 修饰符 extern 返回值类型 方法名称(参数列表) 如: [csharp] view plain co ...

  8. 在 C# 中通过 P/Invoke 调用Win32 DLL

    ,.NET Framework 1.0 或 1.1 版类库中存在任何 Windows 所没有的功能限制都不足为怪.毕竟,32 位的 Windows(不管何种版本)是一个成熟的操作系统,为广大客户服务了 ...

  9. .NET笔试题集(一)

    题目来源于传智播客和各大互联网,复习.重新整理贴出来. 1.简述 private. protected. public. internal.protected internal 访问修饰符和访问权限 ...

最新文章

  1. Gartner:企业架构开始更加紧密地向业务看齐
  2. [Hive_11] Hive 的高级聚合函数
  3. DeepMind丢掉了归一化,让图像识别训练速度提升了8.7倍 | 已开源
  4. 通过自己定义MVC的Controller的Json转换器解决日期序列化格式问题
  5. 如何正确理解近似点梯度下降算法
  6. mysql function 表名作为参数_mysql 常用的分组聚合函数
  7. iOS有哪些数据类型/基本数据类型?
  8. 按照两个dataframe的index合并数据
  9. 华为Mate 40 Pro维修价来了:这个部件最贵,够买一部顶级旗舰
  10. linux4安装gcc,当ubuntu已有gcc4时安装gcc3
  11. Java GUI简单点名器
  12. 视频剪辑软件Movie Studio安装教程
  13. 计算机一级常用计算公式,全国计算机一级考试题库
  14. 天地不仁,以万物为刍狗!
  15. NLTK-006:分类文本(性别鉴定)
  16. CSS3:boder-radius
  17. 小米手表如何优雅听歌?
  18. 能预防及治疗癌症?哈佛研发出可侦测基因缺陷的人工智能系统
  19. ggplot2 theme主题参数详解
  20. 小数化分数 思路及代码模板 c++实现

热门文章

  1. 淘宝便宜的那个奥比中光摄像头(astra pro)在ubuntu16.04下Ros(kinectic)中使用说明
  2. 事务是什么,以及事务四个特性
  3. c语言网球循环赛,网球循环赛比赛日程表n为奇数问题
  4. LInux 小技巧(转)
  5. uniapp 密码支付,多样式支付,数字密码,支付密码,数字键盘,多样自定义支付组件,可以根据用户需求调节支付样式,总共八中组合满足大多数需求,真正的开箱即用
  6. Linux学习:Shell编程总结
  7. RS485波形数据解析
  8. python判断当前激活窗口_多种窗口都可能被激活的情况下判断其中某个是否激活...
  9. 影响PHP+MySQL网站打开速度的几个因素
  10. 学生党必看,JavaScript基础面试题