首页 > 其他分享 >【Cpp 基础】分离式编译模式

【Cpp 基础】分离式编译模式

时间:2024-01-10 14:56:00浏览次数:34  
标签:文件 头文件 函数 代码 源文件 编译 分离式 Cpp

模式定义

分离编译模式源于C语言,在C++语言中继续沿用。简单地说,分离编译模式是指:一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件连接起来形成单一的可执行文件的过程。

 

模式由来

分离编译模式是C/C++组织源代码和生成可执行文件的方式。在实际开发大型项目的时候,不可能把所有的源程序都放在一个头文件中,而是分别由不同的程序员开发不同的模块,再将这些模块汇总成为最终的可执行程序。 这里就涉及到不同的模块(源文件)定义的函数和变量之间的相互调用问题。 C/C++语言所采用的方法是:
  • 只要给出函数原型(或外部变量声明),就可以在本源文件中使用该函数(或变量)。
  • 每个源文件都是独立的编译单元,在当前源文件中使用但未在此定义的变量或者函数,就假设在其他的源文件中定义好了。每个源文件生成独立的目标文件(obj文件),然后通过连接(Linking)将目标文件组成最终的可执行文件。
程序编译的简要过程包括预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。  

模式优势

  • 可维护性(模块化和代码组织):将函数和类的声明(包括函数原型、类的成员和属性等)放在头文件中,将函数和类的实现(具体的函数逻辑、成员函数的定义等)放在源文件中。这种分离有助于对代码进行模块化和组织,使代码更加清晰和可维护。头文件可以作为接口文档,给其他开发人员提供使用代码的相关信息。
  • 可重用性:将代码逻辑和实现分离可以增加代码的可重用性。头文件中的声明可以被多个源文件引用,这样不同的源文件可以共享相同的函数和类的定义,避免了重复编写相同的代码。这对于开发大型项目或者多人合作开发非常有用,可以提高开发效率。
  • 编译效率:当头文件被多个源文件包含时,编译器只需编译一次头文件即可,然后在编译不同的源文件时,只需链接相应的目标文件即可。这样可以提高编译效率,减少编译时间。如果将所有代码都写在一个文件中,每次修改都需要重新编译整个文件,非常耗时。
  • 安全性:头文件中只包含函数和类的声明,并不包含实现的细节,这样可以隐藏具体的实现逻辑。只有源文件中包含了实现的代码,其他文件无法直接访问和修改具体的实现,从而保护了代码的安全性和稳定性。

总结起来,将C++代码分为头文件和源文件可以提高代码的可维护性、可重用性和编译效率,同时也可以隐藏实现细节,保护代码的安全性。这是一种良好的编程实践,尤其适用于大型项目或者多人协作开发的情况下。

标签:文件,头文件,函数,代码,源文件,编译,分离式,Cpp
From: https://www.cnblogs.com/FBsharl/p/17956474

相关文章

  • 在CentOS环境下编译GreatSQL RPM包
    本文介绍如何在CentOS环境下编译GreatSQLRPM包。运行环境是docker中的CentOS8x86_64:$docker-vDockerversion20.10.10,buildb485636$dockerrun-itd--hostnamec8--namec8centosbasha0a2128591335ef41e6faf46b7e79953c097500e9f033733c3ab37f915b69439$doc......
  • 在CentOS环境下编译GreatSQL RPM包
    本文介绍如何在CentOS环境下编译GreatSQLRPM包。运行环境是docker中的CentOS8x86_64:$docker-vDockerversion20.10.10,buildb485636$dockerrun-itd--hostnamec8--namec8centosbasha0a2128591335ef41e6faf46b7e79953c097500e9f033733c3ab37f915b69439$doc......
  • 在CentOS环境下编译GreatSQL RPM包
    本文介绍如何在CentOS环境下编译GreatSQLRPM包。运行环境是docker中的CentOS8x86_64:$docker-vDockerversion20.10.10,buildb485636$dockerrun-itd--hostnamec8--namec8centosbasha0a2128591335ef41e6faf46b7e79953c097500e9f033733c3ab37f915b69439$do......
  • 迅为RK3568开发板Android11/12/Linux编译驱动到内核
    在平时的驱动开发中,经常需要在内核中配置某种功能,为了方便大家开发和学习,本小节讲解如何在内核中添加驱动。具体的讲解原理讲解请参考本手册的驱动教程。Android11源码如果想要修改内核,可以运行以下命令进行修改:cdkernel/makeARCH=arm64rockchip_defconfigmakeARCH=arm64men......
  • 迅为RK3588开发板编译 Buildroot单独编译图形化界面二
    第二步:编译kernel首先在linux源码目录下输入以下命令进入编译的UI界面,进入之后如下所示:./build.sh然后将光标移动到第二个kernel,点击回车即可开始kernel内核的编译,编译过程如下所示:内核编译完如下图所示:编译完成后映像文件会打包成boot.img放到kernel目录。如下图......
  • STM32MP157D-DK1 Qt程序交叉编译与运行测试
    上篇文章介绍了STM32MP157D-DK1开发板Qt镜像的构建,通过在Ubuntu中重新编译带有Qt功能的系统来实现。本篇在上篇的基础上,继续搭建Qt的交叉编译环境,实现Qt程序在Ubuntu中编译,在STM32MP157板子中运行。1编译安装SDK在上篇编译系统镜像的基础上,继续编译和安装SDK。1.1编译SDK执行如下......
  • Ubuntu 22.04.1 LTS 编译安装 mysql5.6
    在Ubuntu22.04下安装mysql5.6,试了很多方法都失败了,最后编译安装成功了。1、看下有没有其它版本的mysql,有的话就卸载掉#查询dpkg-l|grepmysql#如果有则卸载apt-getremove--purge<mysql程序名称> 2、安装依赖apt-getinstallgccapt-getinstallg++apt-get......
  • Java编译原理
    概述java语言的"编译期"分为前端编译和后端编译两个阶段。前端编译是指把*.java文件转变成*.class文件的过程;后端编译(JIT,JustInTimeCompiler)是指把字节码转变成机器码的过程。在编译原理中,将源代码编译成机器码,主要经过下面几个步骤:Java中的前端编译java的前端......
  • ZLMediaKit库 编译安装
    一ZLMediaKit库简介ZLMediaKit是一个基于C++11的高性能运营级流媒体服务框架官方写的项目特点:基于C++11开发,避免使用裸指针,代码稳定可靠,性能优越。支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/Websocket-FLV/GB28181/MP4),支持协议互转。使用多路复用/多线程/异步网络IO模式开发,并发性......
  • 未来编程语言什么样?编译解释兼容方为王
    ○、编程语言的未来?随着科技的飞速发展,编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心,为程序员提供了与机器沟通的桥梁。那么,在技术不断进步的未来,编程语言的走向又将如何呢? 俗话说,温故而知新,对编程语言也不例外。要探讨编程语言的未来,我们先回溯一下编程语......