1.在头文件中定义const类型的非static变量,在link时不会报错,这是因为const型的变量在complie时已经转换为常量,每个obj模块里有一个相同内容的常量,并不会有变量名冲突发生。
2.在头文件定义非const类型时,link时报错,这是因为这样相当于在每个包含该头文件的cc文件的全局域定义了一个名字相同的全局变量,虽然在complie时由于分开编译,不会产生错误,但是在link时,将会发生变量名冲突。
3.在头文件中使用extern 声明一个全局变量时可以的,而且是全局变量使用的推荐做法,前提是声明的这个全局变量,已经在一个cc文件,且只在一个cc文件中定义。
4. 在头文件中定义的一个static变量,对于包含该头文件的所有源文件,实质上在每个源文件内定义了一个同名的static变量,他们仅为该源文件的全局变量而非全程序的全局变量。实际上在编译过程中,会为其每个obj模块中编译产生不同的名字,所以在link时候不会报错。但这样相当于在每个obj模块中有一个的static变量,它实际上是独立在每个obj模块中的文件级全局变量,不是全程序域的全局变量。
所以,在头文件中,最好只声明而不定义,定义也仅仅定义const型变量

在头文件中定义或声明变量相关推荐

  1. 能否用痰盂盛饭——谈谈在头文件中定义外部变量

    能否用痰盂盛饭--谈谈在头文件中定义外部变量 - garbageMan - 博客园 能否用痰盂盛饭--谈谈在头文件中定义外部变量 "能否用痰盂盛饭"并非是一个技术问题,而是一个哲学 ...

  2. 关于在头文件中定义变量

    注意头文件中不可以放变量的定义!!!一般情况下头文件中只放变量的声明,因为头文件要被其他文件包含(即#include),如果把定义放到头文件的话,就不能避免多次定义变量,C++不允许多次定义变量,一个 ...

  3. 【自我修养】不要嘻嘻哈哈的在头文件中定义变量

    在头文件中直接定义变量甚至定义加上赋值,是非常没有修养的行为,新手是经常这样干,有的老手也不注意,这是不应该的. 在头文件中定义变量会出现这些问题: 1,出现变量重复定义的错误.如果你在头文件中定义了 ...

  4. C++中头文件中定义的变量

    1.在头文件.h中定义static变量,如: static int x;其实就等效于每个引用该头文件的源文件中,定义一个变量名为x的整型静态全局变量,每个文件中的x变量均属于本源文件,各文件中的互不相 ...

  5. 能不能在头文件中定义全局变量?

    首先,这是一篇科普文,所以 比较杂,我尽量写清楚一些. 1.ANSI C标准是什么?GNU又是什么?ld是什么? ANSI C是C语言的标准规范,是国际标准化组织制定的国际标准. 虽然 ANSI C规 ...

  6. c语言头文件可以定义全局变量,C语言在头文件中定义全局变量

    C语言在头文件中定义全局变量 头文件定义全局变量等问题 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 可以,在不同的C文件中以static形式来声明同名全局变量.头文件中不可以直接定 ...

  7. 头文件中定义全局变量

    引言 这些天写的程序中用到了全局变量,一开始是在一个文件下做测试后来把文件按逻辑拆分了一下,不同的代码被放在了几个文件中,最后用Makefile来编译就遇到了今天的话题,怎么在头文件中定义全局变量呢? ...

  8. c语言头文件中定义inline static相关函数的优劣

    头文件中常见static inline函数,于是思考有可能遇到的问题,如头文件经常会被包含会不会产生很多副本?网上说法不一.于是自己验证.经过arm-none-eabi-gcc下测试后得出结论. in ...

  9. 编写一个头文件,头文件中定义一个宏cube(x)用于求一个数的平方

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p145 7.1.2 上级实训内容 [实现内容17]编写一个头文件,头文件中定义一个宏cube(x)用于 ...

  10. C11的对齐特性是在新的头文件中stdalign.h声明的

    void*aligned_alloc(size_t algn,size_t size); 分配size字节以algn字节对齐的内存,并返回指向所分配内存的指针. C11的对齐特性是在新的头文件中< ...

最新文章

  1. Qt嵌入外部EXE程序,并显示在主界面中!
  2. PHP的学习--Traits新特性
  3. 【UIKit】UITableView 1
  4. linux系统12,Linux操作系统12则经典应用技巧
  5. Excel自定义函数使用正则表达式详解
  6. DockerCompose-部署微服务集群
  7. Go Modules 的智障版本选择
  8. retinex 的水下图像增强算法_图像增强论文:腾讯优图CVPR2019
  9. 聊聊缓存机制:双写兜兜转转,又回到了串行化
  10. Hibernate关联关系映射-----单向一对一映射配置
  11. source insight 4 破解
  12. ECSHOP的订单状态在数据库中的表现(order_status, shipping_status, pay_status)
  13. 计算机组成原理—Cache主存块中的替换算法
  14. JDK自带工具keytool的使用
  15. java定时任务 时间_java 定时任务的执行时间表示-
  16. 计算机专业保研面试备考:数据库系统理论
  17. python 二值化细化_Python - 图像的细化(骨架抽取)
  18. V831基础-GPIO
  19. 微服务落地,我们在考虑什么?\n
  20. Win10打开软件提示comdlg32.ocx文件丢失?

热门文章

  1. 分布式锁是啥?对比下redis和zk两种分布式锁的优劣?
  2. 【洛谷P5018 对称二叉树】
  3. 盖雅工场完成3亿元C轮融资,由老虎环球基金领投...
  4. 使用css让文字两端对齐
  5. Android Metro风格的Launcher开发系列第一篇
  6. 【用户】create_user_with_sshkey.sh
  7. zoj 3284 Matrix Processing(二维树状数组)
  8. uni-app uniCloud 前端操作数据库 模糊查询
  9. OpenLayers geojson 进行展示矢量标签展示
  10. Flutter ContrainedBox