今天犯了一个低级的错误,在头文件中定义了一个变量,而该头文件被多个源文件调用,导致该变量重复定义。然后我就把改变量改成static类型的了,这下编译倒是不出错了,就是结果跟我想象的不一样,在一个文件中改了,而在另一个文件用的时候,结果为0.

然后发现这个错误好低级,正确的用法是在源文件中定义,在头文件中声明,而别的源文件想用,就引用该头文件。

我们来说说定义和声明的关系:

定义:指有这么个东西,而且就放在这。

声明:仅仅指有这么个东西,它是在别的文件中定义的。

所以定义只能一次,而声明是可以多次的,在编译器编译的时候,只有变量定义的文件所生成的中间文件会有该变量的信息,其它声明该变量的文件中,不会有该变量。

其实还遗留了一个问题,为什么在头文件中用static修饰变量就不会报重复定义的错误了?

这是因为每个包含该头文件的源文件中都会有一个属于它们自己的变量,注意:虽然只在头文件中定义了一次,实际的结果是每个包含该头文件的源文件都会定义一个相同名字的变量,但是有多少源文件引用,就定义了多少个变量,而且每个源文件只能访问属于它自己的变量(因为是static的)。

c语言变量声明举例,C语言变量的定义和声明相关推荐

  1. c语言分量运算符举例,c语言(运算符和表达式).ppt

    第4章C世界中的加减乘除 运算符和表达式 C中的运算符和表达式算术运算符和表达式关系运算符和表达式逻辑运算符和表达式条件运算符和表达式赋值运算符和表达式自增 自减运算符逗号运算符和表达式运算符的优先级 ...

  2. extern、定义和声明

    Extern的问题在于不知道这个关键词出现的时候到底是声明还是定义. 谨记:声明可以多次,定义只能一次. 对于变量来说,定义就是声明. 例如:  int a;  我们可是说它是定义也可以说它是声明. ...

  3. c文件、h文件、定义、声明(详解)

    最近在重新学习编程,拿一个"扫雷"的游戏练练手,碰到问题 问题 为什么要分.h文件..c文件? 变量声明.定义,函数声明.定义,到底做了什么事?起到什么作用? key words ...

  4. 1、C语言面试笔试---变量定义和声明

    文章目录 1.背景 2.变量定义和声明 1.局部变量和全局变量 2.变量的存储类别 3.例题 4.内存泄漏 1.背景 2019秋招马上开始了,今天已经是7月30号了,赶紧刷刷C语言,争取在8月中旬刷完 ...

  5. python语言变量随时声明_2. Go语言五种变量创建的方法

    对于只有 Python 语言经验的朋友,也许会不太理解声明这个词,在 Python 中直接拿来就用,也不用声明类型啥的. Go 语言是静态类型语言,由于编译时,编译器会检查变量的类型,所以要求所有的变 ...

  6. java未知变量的类型_Java语言中类、变量及方法的声明 | 学步园

    类声明 [ public][ abstract][ final] class NameOfClass [ extends Super][ implements Interfaces] pubilc:声 ...

  7. C++ 语言变量的定义、声明和初始化

    C++ 语言变量的定义.声明和初始化 1. 定义变量 每种变量都存储一种特定的数据,在定义了变量后,它可以存储的数据类型就是固定的.存储整数的变量,就不能存储小数. 1.1 命名变量 变量的名称可以是 ...

  8. java for循环定义变量,在java语言里for循环里的变量如何声明在外面进行使用。

    在java语言里for循环里的变量如何声明在外面进行使用. 关注:142  答案:2  手机版 解决时间 2021-02-01 21:59 提问者懷念那年夏天 2021-01-31 21:11 pub ...

  9. C语言:for循环里的变量,在外面声明与在里面声明,在汇编层面上有区别吗?

    !!!喜欢看视频的朋友请点这里!!! 一.变量声明在for循环外面 C代码如下: #include <stdio.h> int main() {int i, p;for (i = 0; i ...

最新文章

  1. shell实例第8讲:seq命令
  2. 连载《一个程序猿的生命周期》-《发展篇》 - 3.农民与软件工程师,农业与IT业...
  3. 机器学习笔记: attention
  4. WebsiteSpark是免费软件吗?
  5. assetbundle能不能删除_Unity3d爬坑篇(2)之Assetbundle、Shader和Keyword
  6. 哈尔滨阳光计算机学院是不是黄了,黑龙江这4所野鸡大学,常被误认为是名校,实则害人不浅...
  7. JavaFX滚动事件
  8. 使用Canal实现redis和mysql的同步
  9. PRML-系列一之1.5.1~1.5.3
  10. VLC测试IPv4 IGMP/IPv6 MLD协议
  11. 用servlet路径访问一个html,java web中servlet、jsp、html 互相访问的路径问题
  12. Spring web项目中web.xml常用的配置
  13. 190421每日一句
  14. JavaScript详细解析
  15. 油气井钻井风险预测与控制系统——需求分析
  16. 布兰迪斯大学计算机美国大学排名,美国大学排名 布兰迪斯大学排名汇总
  17. numpy的squeeze函数和expand_dims函数
  18. 【代码】获取日期所在月份的 月初、月末的日期
  19. illustrator插件-拼版功能开发-一键拼版-js脚本开发-ai插件
  20. 虚拟页式存储管理——页面置换算法及其影响的缺页中断率

热门文章

  1. AI驱动智能化日志分析 : 通过决策树给日志做聚类分析
  2. SSM山东医院-1-登录(对象条件查询)-未加密版本
  3. linux物理网卡地址没有,Linux更改网卡物理地址
  4. congestion map解读
  5. python 如何调用linux系统中命令
  6. linux sql server调优,SQL SERVER性能优化(转)
  7. oracle审计功能如何实现启动关闭功能
  8. 社保基金入市规模或达3000亿元
  9. 【转帖】Eclipse快捷键指南
  10. linux服务器如何访问,如何连接一个Linux服务器