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

漫谈:C语言 C++ 声明和定义的区别是什么

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。


        C语言麻拐得很。

        “声明”的意思是“有这个东西,但不一定在哪儿”。

        “定义”的意思是“创建这个东西”。“定义”当然同时也是“声明”。

       声明可以有多个,但不可以不一致。定义只能有一个。

        一个变量或一个函数,什么时候是定义、什么时候是声明,是很复杂的。

        原则上,头文件里面应该只有声明而没有定义

int a;

        这是一个定义(同时也是一个声明)。

        如果这是在头文件里,而这个头文件被包含了两次,那么就是定义了两次,编译无法通过。所以一般变量不建议在头文件里面定义。

extern int a;

        这是一个声明,变量在那哪里定义不知道。同样的声明可以有多个,所以头文件可以随意包含而不担心冲突。

int a();

        这是一个声明,因为没有函数体,不可能实际生成这个函数。任何函数被调用前编译器都要知道函数的声明,不然不知道怎么传参数。

int a()
{return 0;
}

        这是一个定义,会实际生成函数的代码供其它地方调用。因为定义只能出现一次,所以函数体一般也写在源文件里(而不是头文件里)。

        类和全局变量、全局函数不一样,类里面的所有成员变量都是声明,成员函数则是可以是定义也可以是声明,类的静态变量在类外面定义,成员函数也可以定义在外面。类的成员函数如果定义在里面,每个源文件都会包含一份实现代码(当然编译器可以优化掉重复的)。类的非静态变量是在定义类的实例的时候生成的。


(这里是结束)

http://www.dtcms.com/a/388702.html

相关文章:

  • Java企业级开发中的对象类型深度解析:PO、Entity、BO、DTO、VO、POJO 使用场景、功能介绍、是否必须、总结对比
  • 从弱 AI 到通用人工智能(AGI):核心技术壁垒与人类社会的适配挑战
  • 数据序列化语言---YAML
  • Dify: Step2 Dify模型配置 Dify, Docker,ollama是什么关系
  • SSH连接排故排查
  • 【DMA】DMA架构解析
  • STM32HAL库-移植mbedtls开源库示例(一)
  • MAP的具体实现
  • 排序不等式的推广,对于任意两个数列的推广
  • 9.7.3 损失函数
  • Java Web开发的基石:深入理解Servlet与JSP​
  • pyOCD发布V0.39版本(2025-09-17)
  • kernel侧CPU是怎样判断共享的?
  • pcl案例六 基于配准的无序抓取
  • 动态库和静态库的链接加载
  • 离线安装docker镜像
  • MySql索引性能优化
  • 【实战指南】WAF日志分析系统的生产部署:性能调优与最佳实践
  • OKZOO联合非小号TKW3,海上ALPHA WEB3派对启航
  • Java工程代码架构度量:从DSM到构建工具的深度实践
  • 车联网网络安全
  • AI模型压缩-详解
  • 从入门到熟练掌握MySQL:聚焦增删改查操作
  • 小目标检测的尺寸极限
  • deepblog insCode 初体验[设计待更新]
  • MySQL--事务
  • PolarDB-for-PostgreSQL CDC 总结
  • web:ts的构造函数
  • 深入解析API测试:从工具使用到自动化实践
  • 某机场网络安全改造方案详细解析