当前位置: 首页 > news >正文

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

2023年8月28日,周一下午

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

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


目录

  • 声明和定义的根本区别
  • 结构体的声明和定义
  • 声明结构体
  •  定义结构体
  • 类的声明和定义
  • 函数的定义和声明
  • 声明函数
  •  定义函数
  • 变量声明和定义
  • 声明变量
  • 定义变量

声明和定义的根本区别

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

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

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

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

结构体的声明和定义

声明结构体

struct student;

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

 定义结构体

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

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

struct student {int age;
};

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

类的声明和定义

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

函数的定义和声明

声明函数

int max(int num1, int num2);

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

 定义函数

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

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

int max(int num1, int num2) {return num1 > num2 ? num1 : num2;
}

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

变量声明和定义

声明变量

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

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

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

extern type name;
extern int x;
extern student s1;

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

定义变量

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

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

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

extern type name=value;
type name;
type name=value;
extern int x=1;
int x;
int x=1;

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

http://www.lryc.cn/news/143775.html

相关文章:

  • 掌握C/C++协程编程,轻松驾驭并发编程世界
  • MyBatis-Plus的分页配置类
  • 排序算法-选择排序(Java)
  • SpringBoot 怎么返回html界面
  • watch computed 和 method
  • 数据结构,线性表有哪些
  • 服务间通过Feign相互调用报错,参数是MultiparFile、参数是POJO报错
  • Flutter系列文章-Flutter应用优化
  • opencv案例03 -基于OpenCV实现二维码生成,发现,定位,识别
  • 叠螺式污泥脱水机的要点及价格分析
  • Visual Studio中Linux开发头文件intellisense问题的解决办法
  • 如何以CPU方式启动Stable Diffusion WebUI?
  • HTTP 框架修炼之道 | 青训营
  • 【活动】怎么维护电脑?
  • Linux安装Docker
  • 极氪汽车的云资源治理细探
  • 设计模式之抽象工厂
  • 问道管理:数字经济概念走势强劲,竞业达、久其软件等涨停,观想科技等大涨
  • 14-redis
  • MySQL——基础——子查询
  • 业务系统架构实践总结
  • Linux学习之DNS服务的原理
  • 《Linux内核源码分析》(3)调度器及CFS调度器
  • Docker:如何删除已存在的镜像
  • Qt——Qt 开发中所涉及的所有控件(基本控件、容器控件、布局控件、高级控件、其他控件、多媒体控件、定制控件)
  • 基于Ubuntu坏境下的Suricata坏境搭建
  • vue3权限管理——(路由权限)动态路由设置
  • 小程序开发之登录授权
  • 批量根据excel数据绘制折线图
  • 无锁并发:探秘CAS机制的魔力