- 变量(包括变量,函数)的使用过程需要声明,定义,使用。
- 声明:告诉编译器目标对象存在,但是编译器不用管是否真实存在。
- 定义:为变量开辟空间,则定义过后该变量就存在了全局唯一地址。
- 使用:利用变量进行业务控制。
其中定义只能进行一次,声明可以出现无数次,使用次数也没有限制。
唯独对定义变量操作存在限制,因为定义是开辟内存的过程,如果可以多次定义,那只能说多次定义的不是同一个变量。
| extern int a; |
| int a{0}; |
| a = 3; |
- 头文件中仅对变量进行声明,当一个头文件被其他文件include后被展开,如果头文件中存在定义,那么该头文件被多次包含就会存在多次定义,就重复定义。
| int add(int a, int b){return a + b;} |
| template<typename T> |
| T add(T a, T b){return a + b;} |
- 头文件重复包含, 但是作用域不能跨文件,限制的是同一个文件中被多次包含。
| |
| #pragma once |
| int a = 3; |
| |
| |
| #include "a.h" |
| |
| |
| #include "a.h" |
| - a.h文件中对变量a进行了定义,编译的是目标文件,定义的位置也是目标文件中。若头文件没有被include到源文件中,则该变量并没有实现定义过程。 |
| - a.cpp中include头文件,参与了编译,则进行了一次定义。b.cpp中include头文件,再次参与了编译,则对变量a进行了重复定义。 |
- 源文件被编译成目标文件,是备用进行链接使用的,全局可见的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异