最近审核代码发现,有些刚入门的同学在头文件中定义了全局变量,链接报错重定义。

一般来讲,全局变量一定要定义在.c文件中,比如int g_int=0;,然后头文件extern int g_int,老司机差不多都这样写,这样某个地方(其它源文件)中需要用到该全局变量就把这个头文件包含进去,或者在其它源文件中直接extern int g_int,可千万不要将全局变量定义在头文件中,如果定义在头文件中,包含了这个头文件的文件都会在预处理的时候展开这个头文件,相当于在这里又定义了一个int g_int=0;链接的时候就会出错。

另外,在一些编译器中会提示你加static,当你在头文件中定义全局变量的时候,加了static的全局变量表示只在该源文件中有效,不管是.h还是.c,所以你某个源文件中能编译通过,在使用的时候发现,这个全局变量地址怎么不一样,这就是因为加了static的缘故,相当于你在两个原文件中分别定义了static的同名变量,因为static修饰作用,不会重名报错,但是很有可能跟你初始想法就不一样了。

所以最后记得千万不要在头文件中定义全局变量,而要在.c文件中定义,如果全局变量特别多,上百个,可以专门用一个头文件来引入这些全局变量,也就是一个头文件专门:

extern int g_int=0;
extern float g_float=0.0f;
.........

然后在用的地方直接导入该头文件就可以了,不用在每个用的地方专再重复extern了。
大致就这些了,水平有限,如有错误,请斧正。

C++ 全局变量定义在哪里合适相关推荐

  1. 【C++】全局变量定义在哪里合适

    最近审核代码发现,有些刚入门的同学在头文件中定义了全局变量,链接报错重定义. 一般来讲,全局变量一定要定义在.c文件中,比如int g_int=0;,然后头文件extern int g_int,老司机 ...

  2. C++中为什么不能将全局变量定义在头文件中?

    一.什么是全局变量? C++中全局变量一般指定义在函数体外的变量. 全局变量按可访问性可分为外部变量和内部变量. 二.内部变量和外部变量的定义 内部变量:使用了static关键字修饰的全局变量.它的可 ...

  3. C语言开发单片机如何避免全局变量过多混乱

    每个攻城狮的成长经历,目标总是相似的. 刚开始学习这门技术的时候,希望自己能独立做出各种各样智能的产品. 有了这能力,更有竞争力,也更挣钱,在越来越智能的时代不至于被抛弃. 可惜并不是每个人都能走到终 ...

  4. zts在c语言中的意思,C语言入门-全局变量 - osc_wna7tzts的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.全局变量 定义在函数外面的变量是全局变量 全局变量具有全局的生存期和作用域 它们与任何函数无关,在任何函数内部都可以使用它们 #include int f(void); // 全局变量 int g ...

  5. c 全局变量多线程调用_c语言局部变量 静态局部变量 全局变量与静态全局变量...

    基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

  6. python变量进阶(可变不可变,局部变量和全局变量)

    变量进阶(理解) 目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引 ...

  7. 全局变量-全局变量定义的位置及代码结构

    # 注意:在开发时,应该把模块中的所有全局变量 # 定义在所有函数上方,就可以保证所有的函数 # 都能够正常的访问到每一个全局变量了 num = 10 # 再定义一个全局变量 title = &quo ...

  8. open函数和errno全局变量

    (1)open函数 man man   查看man文档的首页  其中DESCRIPTION部分描述了man文档的每一章的章节内容 第2章System calls为系统调用,即Liunx系统函数. ma ...

  9. C语言进阶——全局变量

    全局变量 ·定义在函数外面的变量是全局变量 ·全局变量具有全局的生存期和作用域 ·它们与任何函数都无关 ·在任何函数内部都可以使用它们 全局变量初始化 ·没有做初始化的全局变量会得到0值 ·指针会得到 ...

最新文章

  1. CMFCTabCtrl的使用
  2. Git多个commit合并成一个【中间提交合并 尾部提交合并】
  3. POJ - 1091 跳蚤(容斥原理+数论)
  4. 机器学习:算法模型:决策树
  5. Chrome、Edge 合力围剿,Safari 夹缝求生?
  6. 谈谈双亲委派模型的第四次破坏-模块化
  7. 如何优雅的处理异常(java)
  8. java小程序实例大全_12个用Java编写基础小程序经典案例(收藏)
  9. linux下对IP地址的转发和端口的伪装----利用iptables部署
  10. 【手把手教你】使用qstock实现量化策略选股
  11. 从头到尾彻底解析Hash 表算法
  12. php ua解析,UA识别有什么用?
  13. mysql三表关联查询
  14. 漏洞检测:异常页面导致服务器路径泄漏 WASC Threat Classification
  15. CAD输入坐标的方式有哪些?
  16. 随机森林特征重要性度量
  17. C语言--自定义字符串输入/输出函数
  18. 恋恋不忘Day 1-1
  19. 人工智能 Java 坦克机器人系列: 遗传算法
  20. 《逻辑学》模拟试题及答案

热门文章

  1. 生日快乐页面_《神武4》电脑版十周年新内容生日快乐上线,福利活动不错过...
  2. QML键盘事件之Enter键无响应解决方法
  3. 实例解析C++多线程并发---异步编程
  4. php网站目录结构图,thinkphp项目目录结构详解
  5. rqn 144 伯虎点秋香(字符串处理)
  6. 计算机教室的开场白,信息技术课的开头
  7. 数据分析思维笔记(基础)
  8. vue脚手架创建项目基本流程
  9. 怎样设置计算机访问数量,win10热点设置连接数量设置想相关方法
  10. oppo r11 android版本,oppo r11 plus有哪些版本_oppo r11 plus内存多大-太平洋IT百科