【C++】详解声明和定义

2023年8月28日,周一下午

研究了一个下午才彻底弄明白...

写到晚上才写完这篇博客。


目录


声明和定义的根本区别

我认为声明和定义的根本区别在于:

同类型的一个标识符可以被重复声明多次,但只能被定义一次。

简单来说,声明可以重复多次,但定义只能进行一次。

和分不分配内存没有关系。

结构体的声明和定义

声明结构体

cpp 复制代码
struct student;

可以看到,我声明了两次结构体student,VS2022没有报错

定义结构体

结构体的定义只是对结构体类型的描述,并不会为其分配内存。

要使用结构体,需要定义结构体变量,并为其分配内存空间。

cpp 复制代码
struct student {
	int age;
};

可以看到,定义了两次结构体student后,VS2022报错

类的声明和定义

因为与结构体的声明和定义一模一样,故不再赘述。

函数的定义和声明

声明函数

cpp 复制代码
int max(int num1, int num2);

可以看到,我声明了两次函数max,VS2022没有报错

定义函数

当定义函数时,并没有为函数本身分配内存。

在编译和链接的过程中,函数的定义会被转换成机器代码,并存储在可执行文件中。当程序运行时,操作系统会为程序分配内存,并将函数的机器代码加载到内存中供程序执行。

cpp 复制代码
int max(int num1, int num2) {
	return num1 > num2 ? num1 : num2;
}

可以看到,定义了两次函数max后,VS2022报错

变量声明和定义

声明变量

在我看来,声明变量只有一种方法:那就是使用extern且不赋值。

因为,这是我所知唯一允许多次重复声明的情况。

此外,这种情况下不会分配内存。

cpp 复制代码
extern type name;
cpp 复制代码
extern int x;
extern student s1;

可以看到,我声明了两次int类型的变量x后,VS2022没有报错

定义变量

在我看来,这三种情况都属于定义变量。

因为这三种情况不允许重复,只能进行一次。

此外,这三种情况都会被分配内存。这是和上面提到的完全不一样的,上面提到过的都不会在定义时分配内存。

cpp 复制代码
extern type name=value;
type name;
type name=value;
cpp 复制代码
extern int x=1;
int x;
int x=1;

可以看到,这三种情况都不允许多次定义。

相关推荐
SunshineBooming4 分钟前
DirectX12 - 基本知识 - 图形驱动的本质
c++·驱动开发
虾球xz7 分钟前
游戏引擎学习第213天
c++·windows·学习·游戏引擎
努力学习的小廉12 分钟前
【C++】 —— 笔试刷题day_14
开发语言·c++
共享家952721 分钟前
深入探索C++ STL:从基础到进阶
c++
漫步企鹅26 分钟前
【GDB】调试程序的基本命令和用法(Qt程序为例)
开发语言·qt·gdb·调试
阿昆的科研日常36 分钟前
Matlab个性化绘图第10期—滑珠进度柱状图
开发语言·matlab·可视化·论文插图
cqbzcsq38 分钟前
2025蓝桥杯省赛C/C++研究生组游记
c语言·c++·蓝桥杯
严文文-Chris40 分钟前
方法区、堆、虚拟机栈、寄存器分别存储哪些内容?为什么存储这些内容?
java·开发语言
一只鱼^_41 分钟前
第十六届蓝桥杯大赛软件赛省赛 C/C++ 大学B组
c语言·c++·算法·贪心算法·蓝桥杯·深度优先·图搜索算法
无名之逆1 小时前
Hyperlane 文件分块上传服务端
服务器·开发语言·前端·网络·http·rust·php