一般来说,extern关键字用于三种场合:

1、用于头文件预编译时对于C语言编译的声明,如常见的:

#ifndef _shader_h_

#define _shader_h_

#ifdef _cplusplus

extern "C"{

}

#endif

#endif

一般这种情况是表示在C++中引用C语言中的函数和变量,如果C++调用一个C语言编写的.DLL时,当包括.DLL的头文件或声明接口函数时,应加extern "C" { }。

2、用于定义外部变量。

extern GLint xParam;

仅仅声明xParam是个外部变量,而其实际定义是在GLint xParam=0的语句中定义的。

声明和定义是完全不同的两个概念,个人理解为声明更类似于引用,这样可以避免在LINK时产生重复定义,某个函数到其他的OBJ文件中需要定义(内存地址)时产生冲突出错,但是注意并不是所有的变量都能用extern声明,只有全局变量并且没有被static 声明的变量才能声明为extern。 如果你不想自己的全局变量被其他文件引用,就加上static声明。

3、用于函数声明。

函数的声明与定义和变量类似,仅仅是暗示这个函数可能在别的源文件里定义。

extern的几种用法相关推荐

  1. static的三种用法,定义静态变量,静态函数,静态代码块!

    static的三种用法,定义静态变量,静态函数,静态代码块! 1.定义静态变量 class PersonStatic { //静态变量的特点 //1.静态变量无需生成对象就可被调用,可以使用类名和对象 ...

  2. c语言中的static和extern,C语言extern与static的用法,及extern “c

    C语言extern与static的用法,及extern "c " 一.c语言static与extern的用法 1.static和extern: 大工程下我们会碰到很多源文件. 文件 ...

  3. Android Intent的几种用法全面总结

    Android Intent的几种用法全面总结 Intent, 用法 Intent应该算是Android中特有的东西.你可以在Intent中指定程序要执行的动作(比如:view,edit,dial), ...

  4. mysql中模糊查询的四种用法介绍

    下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示.  比如 SELECT * FROM [user ...

  5. javamap的用法_Java Map常用的几种用法。

    Java Map常用的几种用法. 通常,Map是由一组键值对组成的数据结构,每个键只能在映射中出现一次.这篇文章总结了有关如何使用Java Map及其实现的类的前9个常见问题解答.为了简单起见,我将在 ...

  6. using 的三种用法

    using 有哪三种用法? 1)引入命名空间. 2)给命名空间或者类型起别名. 3)划定作用域.自动释放资源,使用该方法的类型必须实现了 System.IDisposable接口,当对象脱离作用域之后 ...

  7. C++ operator两种用法【转】

    C++中的operator,有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换).下面分别进行介绍: 1.operator ...

  8. java和python可以在一个项目中同时使用么-java调用python的几种用法(看这篇就够了)...

    java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...

  9. Vue——基本的代码结构和插值表达式、v-cloak||Vue指令之v-text和v-html||v-bind的三种用法||Vue指令之v-on

    Vue的基本代码 <!DOCTYPE html> <html lang="en"><head><meta charset="UT ...

最新文章

  1. miui android 11有什么变化,想更新体验MIUI12 安卓11内测版?新变动先了解一下!
  2. 进入环境_大学新生,进入新环境该怎样和舍友、同学相处
  3. 诺基亚继续打情怀牌:怀旧小屏手机入网!
  4. 3dsmax给物体贴图之后,物体不显示贴图的解决办法
  5. 《程序员的职业素养》
  6. 谷歌宣布退出中国 google.cn已经关闭
  7. 即时通讯软件(即聊天软件)代表软件列表
  8. godaddy无法修改域名服务器,GoDaddy域名修改DNS教程 - 修改DNSPOD及CLOUDXNS免费DNS
  9. 借助Mendix打造敏捷开发和移动端应用的数字化维修服务平台
  10. CTF-代码审计(2)
  11. 英文词典中的那些词性缩写字母的原型
  12. window 结束进程命令
  13. android锁屏软件开发,Android一键锁屏开发全过程
  14. kruskal C++
  15. 案例分析第一课预习笔记
  16. Mysql报错Table ‘blog.user‘ doesn‘t exist
  17. 【2020】明哥版-JetBrains旗下常用开发工具教程目录更新中-建议收藏
  18. 软考有很多70后的人,是什么原因会参加考试呢?
  19. C++学校图书馆管理系统
  20. 登录注册——注册输入验证

热门文章

  1. js(76-108)
  2. 【论文阅读笔记】Lightweight Image Super-Resolution with Enhanced CNN
  3. webRTC服务器搭建(基于Janus)与Demo运行
  4. 百度网盘限速解决方案--motrix
  5. python 工程进度计划_从零开始的项目实战(7)——项目进度述职报告
  6. 人体动作识别与评价——区别、联系及研究进展
  7. 非递归前序遍历二叉树,非递归中序遍历二叉树,非递归后续遍历二叉树
  8. Ipv6上Ipv4的方法
  9. SEO判断是否是搜索引擎蜘蛛跳转(快照劫持)
  10. 怎样解锁CAD图纸中被锁定的图层?