我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:刘伯温论坛 > 分别编译 >

C++:关于分离式编译

归档日期:07-22       文本归类:分别编译      文章编辑:爱尚语录

  这几天一直在将之前的大代码(一个cpp文件)按模块功能拆分为多个.h和.cpp文件

  std::cout 和A::f(), 都用到了作用域符,都可以防止重名函数,可以更好的支持多人编程。

  1. namespace 可以写在多个不同的文件中,而class只能在一个文件中。

  2. 如果想使用A类中的函数如A::f(), 需要建立一个类的实例(静态函数等除外),而namespace则相当于本身就是一个建立好的实例,可以直接调用函数。

  需要注意的是千万不要在h文件中使用using namespace,否则整个文件都会带上。

  编译器将所有.cpp文件编译为.obj文件再串联起来。如果.cpp中有#include X.h文件,那么第一步预处理会把X.h代码粘贴到.cpp中代替#include语句。

  基于这个特性,显然,如果我们include 同一工程下的.cpp文件,那么会将该.cpp文件重复两次(一次是本身的编译,一次是include的复制)。因此,.cpp文件不适合进行include。

  而我们往往需要在一个.cpp文件中include很多其他文件的代码,那么这时候就需要.h文件。

  如果是声明的话,比如声明了一个函数,在汇编语言中就会通过call语句等在全局中寻找这个函数,只需要这个函数在别的.cpp文件中有定义就可以了,而不需要当时就定义。

  对变量也是这样,当想使用一个别处定义的变量时,首先要声明,使得该名字为程序所知。

  则会自动将j定义为j=0,自动初始化。那么这时就会出现重复定义等错误问题。

  这将告知程序 有这样一个j存在,就可以使用了。而j的定义在其他.cpp中,整体编译完后就可以获得j的定义了。

  因此,在.h中进行声明,在.cpp中进行定义。可以避免重复的编译,也更便于管理。

  注意,不能在函数体内初始化一个extern变量,因为函数体的作用域仅在函数内。

  封装:对类的封装对函数的封装—在函数或者类的外部留下交互接口,将函数或者类的内部封装,通过从交互接口传递参数进行运算(函数执行需要的变量)例子:被封装的计算长方形面积的函数(函数封装)——intare...博文来自:Swxctx

  分离式编译是指一个完整的程序或项目由若干个源文件共同实现,每个源文件单独编译生成目标文件,最后将该项目中的所有目标文件连接成一个单一的可执行文件的过程。  每个.cpp源文件经过预处理,它所包含的.h...博文来自:言安阳

  c++开发中广泛使用声明和实现分开的开发形式,其编译过程是分离式编译,就是说各个cpp文件完全分开编译,然后生成各自的obj目标文件,最后通过连接器link生成一个可执行的exe文件。一、普通函数声明...博文来自:从今以后...

  介绍类的分离式写法,使得代码更加规范,增强了阅读性。分离式写法的规则:1.类的变量:写在类的里面2.成员函数:类中写函数的声明,函数的定义写在类体外。3.写在类外函数定义时,类名前加限定(Object...博文来自:码农code之路

  分享两个写的很好的博文教科书式的回答:另一片写的很好的博文:博文来自:Sherlock_Homles的专栏

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

  随着程序越来越复杂,我们希望把程序的各个部分分别存储在不同的文件中。    我们可以将原来的程序分成三个部分:头文件:包含结构声明和使用这些结构的函数的原型。#pragmaonce#ifnde...博文来自:xiaokunzhang的博客

  将Test 函数的声明和定义放在main.cpp文件中编译没问题,采用分离式编译就会提示string未定义标识符,但运行也能出结构是怎么回事?软件版本vs2015,还请各位大牛帮忙解答。论坛

  1、C++不支持模版的分离式编译,为什么?C++是分别,单独编译,对于每个cpp文件,预编译为编译单元,这个编译单元是自包含文件,编译的时候,不需要其他的文件,编译好了,生成obj文件,然后连接成...博文来自:weixin_34184158的博客

  首先,C++标准中提到,一个编译单元[translationunit]是指一个.cpp文件以及它所include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.c...博文来自:Terry的专栏

  看了这篇文章,我大概了解了一些模板编译的知识:rnc++模板类(一)理解编译器的编译模板过程rn有一点想不通,在分离编译的时候,通过显式 模板实例化得到类的完整定义时,原文中的这一段:rnrnrn“[i]第二种方法,通过显式的模板实例化得到类型。最好将所有的显式实例化过程安放在另外的文件中。在本例中,可以创建一个新文件templateinstantiations.cpp:rn// templateinstantiations.cpp rn#include array.cpprnrntemplate class array ; // 显式实例化rn rnarray类型不是在main.cpp中产生,而是在templateinstantiations.cpp中产生。这样链接器就能够找到它的定义。用这种方法,不会产生巨大的头文件,加快编译速度。而且头文件本身也显得更加“干净”和更具有可读性。但这个方法不能得到惰性实例化的好处,[b]即它将显式地生成所有的成员函数[/b]。[/i]”rnrn显式 模板实例化 将显式地生成类array 的所有成员函数,但会过去看类的定义:rntemplate rnclass arrayrnrn T data_[SIZE];rn array (const arrayrn const array& operator = (const arrayrn。。。。。rn上面两个函数只是声明了一下,没有给出完整定义,这样在模板类实例化以后有两个函数只有声明,没有定义,但是也能编译通过,按说应该报错的呀。为什么?论坛

  我们在写大型程序的时候,肯定希望把不同功能的代码放在不同的文件中。比如我们可以把一个函数或者一个类单独放在一个文件中。这个时候编译器就需要分离式编译这些文件,最后形成可执行文件。文件为编译器的编译单元...博文来自:code_hrbeu的博客

  1.什么是分离式编译?一个项目由若干个源文件共同实现,而每个源文件(.cpp)单独编译成目标文件(.obj),最后将所有目标文件连接起来形成单一的可执行文件(.exe)的过程。------------...博文来自:weixin_34362875的博客

  模板是C++泛型编程的基础,一个模板就是一个创建类或者函数的公式;在具体使用时,我们需要将模板参数转化为具体类型,比如int,float,Vector以及自定义类型;这种转换过程发生在编译阶段。定义模...博文来自:Keep Moving~

  以前一直没注意这个问题,下面进行总结分离编译模式一个项目如果有多个源文件组成,每个源文件单独编译,形成目标文件。最后通过链接器将所有的目标文件链接起来,形成一个可执行的文件。这个过程就叫做分离编译。分...博文来自:wk_bjut_edu_cn的博客

  一、引言只要是接触了C++有一定时间的程序员,都会记住这么一个不成文的规定:类模板的声明与实现最好放在同一个头文件中这或许是来源于某次错误尝试的下意识的修改,又或许是简单搜索了下C++类模板编译报错的...博文来自:(ÒωÓױ)

  编译器遇到模板方法定义时,会进行语法检查,但是并不编译模板。编译器无法编译模板定义,因为它不知道使用什么类型。不知道x和y的类型,编译器就无法为x=y这样的语句生成代码。编译器遇到一个实例化的模板时,...博文来自:林彬的专栏

  朋友想用类模板实现队列,网上找到了源码,在同一个CPP里面可以正常编译运行,但使用分离式的方式就不能通过了。...博文来自:上善若水

  将原来的程序分为三个部分:头文件:包含结构声明和使用这些结构的函数原型。源代码文件:包含于结构有关的函数的代码。源代码文件:包含调用与结构相关的函数的代码。头文件常包含的内容:函数原型使用#defin...博文来自:PENGGB023的博客

  为什么C++编译器不能支持对模板的分离式编译作者:刘未鹏(pongba)转自:C++的罗浮宫(首先,一个编译单元(translationunit...博文来自:wayaoqiang的专栏

  一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件连接起来形成单一的可执行文件的过程成为分离编译模式。2.使用模板在连接时出错在C++程序设计中,在一个源文件...博文来自:Dablelv的博客专栏

  C++的模板有一个较大的缺陷,模板的实现是不能放到独立的cpp文件中的,因为模板函数的特点,必须要类型确定时才能泛化。...博文来自:西风世界

  编程中,功能定义与执行分离编程中,功能定义与执行分离-可行性及优势可行性猜想的优势功能定义与执行分离-对编程语言的要求增加对功能细分的机器码生成增加对功能细分的拆分打包编程中,功能定义与执行分离-可行...博文来自:Ender__的专栏

  有没有什么解决方案?rn要是头文件里面写一个模板类,而那个模板类又那么大,或者一个头文件中有许多函数。如果都在头文件中编写,编译岂不是太耗时间了!?论坛

  答:如果模板的声明和定义不在同一文件内,那么编译在链接阶段的时候会因为找不到对应的函数地址而出错。详解:下面的详解以模板函数为例,模板类和模板类中的函数同样适用。①首先要知道编译的整个过程和每个过程做...博文来自:w_y_x_y的博客

  一般情况下,在建立工程时我们喜欢将函数的声明与定义放在不同的文件中(.h/.cpp),这样当我们在编写源文件程序时需要用到其他文件中的函数时只需在本文件中包含进该函数声明所在的头文件便可引用该函数,这...博文来自:Lonely_Mr_zhang的博客

  分离式编译是指一个完整的程序或项目由若干个源文件共同实现,每个源文件单独编译生成目标文件,最后将该项目中的所有目标文件连接成一个单一的可执行文件的过程。  每个.cpp源文件经过预处理,它所包含的.h...博文来自:言安阳

  模板为什么不支持分离编译?首先,一个编译单元(translationunit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代码将会被扩展到包含它...博文来自:Ferlan的博客

  在上面三、四我们知道积分环节是为了消除静差,但有时候机器启动、结束或出现大幅的偏差时,这样在短时间内会累积大量的偏差,这样就导致积分项很大,以至于出现超调甚至震荡,这样是不允许的!为了克服这个问题,我...博文来自:扶朕起来,我还能学习。。。。

  大数据文摘出品当地时间6月12日,ICML2019于美国长滩市公布了本届大会最佳论文结果。谷歌大脑、MaxPlanck和苏黎世联邦理工学院合作的《挑战无监督分离式表征的常见假设》,以及剑桥大学的一篇《...博文来自:BigDataDigest的博客

  这是python-list的官方实现方式,但其中关于分离式动态顺序表的实现方式描述的不够细致,如果你有数据结构基础的话可以直接去看这篇博客,如果没有的话不妨先看看这篇!什么事顺序表?将元素顺序地存放在...博文来自:追着光梦游的博客

  一般而言,调用函数时,编译器只需要看到函数的声明即可。所以可以把函数的声明放在.h文件中,实现在.cpp的实现文件中; 使用函数的地方#include函数的h文件即可。故一般的风格是件类定义和函数声明...博文来自:好记性不如烂笔头

  ThinkingInC++书里面有把头文件和其实现文件分离编写不过实际上机之后发现实现不了参照zhihu问题解决方案:1....博文来自:YangZuo_Chester的博客

  1.Eclipse+cygwin环境搭建    1.1cygwin下载地址 推荐博文中有详细安装教程,这里不介绍,多此一举;   1.3安装好...博文来自:逍遥游的专栏

  一、 实验名称:LAMP分离部署二、 实验目的:  很多人在搭建的时候都是使用的一台机器来部署LAMP环境,但是我们在实际的工作中一般都是分离部署的。也就是说MySQL是MySQL;它是一台单机,...博文来自:勿念勿扰,相安静好

  写在前面的话关于前后台分离式开发详细介绍大家可以看各类大神都已经将利弊、好坏进行了说明,这里不再赘述,我会以连载帖子进行分离式开发实践,以代码和运行结果进行说明。简单说下开发模式的变化:项目立项需求分...博文来自:u011698550的博客

  分离式滑环是提供在由于尺寸限制,不需要全封闭在某些应用场合,分离的转子和接触刷组合可以解决您对360°旋转连接的问题。而分离的零件或整合的组装、可使用客户现有的轴承系统、低扭矩,低摩擦,低电气噪音、超...博文来自:默孚龙

本文链接:http://saltstudios.net/fenbiebianyi/693.html