EasyC++单独编译

文章转自:微信公众号:Coder梁(ID:Coder_LT)

联合编译:

在上一篇当中,我们编写好了头文件coordin.h,现在我们要完成它的实现

头文件当中只能放一些生命和常量的定义,不能有具体的实现。所以我们要把具体的实现单独放入一个cpp文件当中。因为我们的头文件叫做coordin.h,那么我们与之对应的cpp文件自然就叫做coordin.cpp

在coordin.h当中我们声明了两个函数,自然我们就要完成这两个函数的实现:

#include <cstdio>
#include <iostream>
#include <cmath>
#include "coordin.h"

using namespace std;

polar rect_to_polar(rect xypos) {
    polar answer;
    answer.distance = sqrt(xypos.x * xypos.x + xypos.y * xypos.y);
    answer.angle = atan2(xypos.y, xypos.x);
    return answer;
}

void show_polar(polar dapos) {
    const double rad_to_deg = 57.29577951;

    cout << "distance = " << dapos.distance;
    cout << ", angle = " << dapos.angle * rad_to_deg;
    cout << " degress" << endl;
}

这两个函数一个完成的是直角坐标到极坐标的转换,还有一个是极坐标的输出,输出的时候还包括了一个弧度到角度的转化。

最后我们再来看main函数:

#include "coordin.h"
using namespace std;

int main() {
 rect rplace;
 polar pplace;
 while (cin >> rplace.x >> rplace.y) {
  pplace = rect_to_polar(rplace);
  show_polar(pplace);
 }
}

这里有一个小细节,我们在引入coordin.h的时候使用的是双引号,而不是<>符号。因为如果使用的是尖括号,那么C++编译器将在存储标准头文件的文件系统当中去查找这个头文件,如果是双引号则会在当前目录或源代码目录查找。

还有虽然我们用到的函数实现是在coordin.cpp当中实现的,但我们并不需要将它include进来。而是在之后编译的时候连接进来。

现在我们的代码都已经写好了,但是我们有两个cpp文件,要怎么编译运行呢?

我们可以使用g++ -c命令,将cpp代码编译成目标代码。

g++ -o coordin.cpp

编译之后,我们将会得到一个coordin.o文件,我们再继续编译main.cpp文件:

g++ -o main.cpp

这样我们就得到了两个.o文件,

我们需要把这两个.o文件连接到一起编程一个可执行文件:

g++ coordin.o main.o -o cur

当然,我们也可以把main.cpp的编译和连接步骤合并在一起:

g++ main.cpp coordin.o -o cur

我们单独对每个文件编译的好处是,比如当我们只需要改动main.cpp的时候,coordin.cpp文件可以不用再编译,从而节省编译运行的时间。我们都知道,大型的C++项目的编译是非常耗时的。

当然大型项目当中,我们一般也不会手动编译项目,而会使用例如make等一些自动编译脚本。

到此这篇关于EasyC++单独编译的文章就介绍到这了,更多相关EasyC++单独编译内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • EasyC++自动存储持续性

    转自微信公众号:Coder梁(ID:Coder_LT) 自动存储持续性: 这个概念乍一看有些拗口,其实它很简单,指的是在函数定义中声明的变量的存储持续性是自动的:它们在程序开始执行其所属的函数或代码块时被创建,在执行完函数或代码块时,它们使用的内存被释放. 在默认情况下,我们在函数中声明的变量和函数的参数都是自动存储持续性,它的作用于为局部,没有链接性. 这里的链接性描述了名称如何在不同的单元之间共享,链接性为外部的名称可以在文件之间共享,链接性为内部的名称只能由一个车文件中的函数共享.自动变量

  • 详解C++中的自动存储

    C++有3种管理数据内存的方式即自动存储(栈存储).静态存储和动态存储(堆存储).在不同的方式下,内存的分配形式和存在时间的长短都不同. 下面对自动存储进行说明. 自动存储(栈存储) 对于函数的形参.内部声明的变量及结构变量等,编译器将在函数执行时为形参自动分配存储空间,在执行到变量和结构变量等的声明语句时为其自动分配存储空间,因此称其为自动变量(Automatic Variable),有的教科书也称其为局部变量,在函数执行完毕返回时,这些变量将被撤销,对应的内存空间将被释放. 事实上,自动变量

  • C++ 右值引用

    目录 1.左值和右值 2.左值引用和右值引用 文章转自:公众号:Coder梁(ID:Coder_LT) 1.左值和右值 在我们之前的文章当中,介绍的都是左值引用.C++11在左值引用的基础上推出了右值引用,由于是新特性,加上使用的频率也不是很高,有一定的学习成本. 我们先把引用这个概念抛开,先来看看什么是左值什么是右值.其实很简单,左值可以取地址,位于等于号的左侧.而右值没办法取地址,位于等于号的右侧. int a = 4; 比如我们定义了一个int型的变量a,让它的值等于4.其中a位于等于号的

  • C++模板重载

    目录 1.重载模板 2.问题  文章转自 公众号:Coder梁(ID:Coder_LT) 1.重载模板 函数模板可以使得同一个函数对不同类型使用,非常地方便.但有的时候类型不同,只是通过模板是没办法解决的, 可能逻辑上也会有所区别,这个时候只是使用模板是无法解决的. 为了满足这种需求,我们可以像是重载函数那样重载模板.和常规的函数一样,重载的模板的函数特征,也就是入参的数量和类型必须有所不同. 举个例子:比如我们之前定义了一个函数模板用来交换两个变量的值.如果我们要交换的不只是变量,而是两个数组

  • C++函数模板介绍

    文章转自: 公众号:Coder梁(ID:Coder_LT) 函数模板: 所谓函数的模板,本质上也就是使用泛型来定义函数. 所谓的泛型其实也就是不定的类型,比如说我们使用vector的时候,可以定义各种类型的vector,可以定义存储int型的vector也可以定义存储float类型的,也可以定义存储其他类型.我们在声明的时候将存储的类型当做参数传给了模板. 泛型可以用具体的类型,比如(int或double)替换,通过将类型作为参数传给模板,编译器会根据传递的参数类型生成该类型的函数.这种方式也被

  • C++模板显式具体化

    出品 | 公众号:Coder梁(ID:Coder_LT) 前文当中说了,模板函数虽然非常好用,但是也存在一些问题.比如有的操作并不是对所有类型都适用的,针对这种情况C++提供了一个解决方案,就是针对特定类型提供具体化的模板定义.这里的具体可以理解成类型的具体. 我们来看一个C++ Primer当中的例子,假设现在我们有一个结构体叫做job: struct job { string name; double salary; int floor; } 对于结构体是可以整体赋值的,所以之前的Swap函

  • C++编写头文件

    文章转自公众号:Coder梁(ID:Coder_LT) 我们之前做的左右示例都是在一个单独的cpp文件当中完成的,当我们要做一个相对复杂或大型的项目时,我们显然不能把所有代码都写在一个cpp里.这就需要我们拆分代码,但代码按照逻辑划分,写入不同的cpp文件当中. 在我们编译的时候,我们可以将这些cpp文件分别单独编译,最后再连接到一起.这样做的好处是,当我们只修改了某一个文件的时候,可以只用单独编译那一个文件,不会影响其他文件的编译结果.一般来说大型项目,都会使用一下自动化的编译工具,比如mak

  • EasyC++单独编译

    文章转自:微信公众号:Coder梁(ID:Coder_LT) 联合编译: 在上一篇当中,我们编写好了头文件coordin.h,现在我们要完成它的实现 头文件当中只能放一些生命和常量的定义,不能有具体的实现.所以我们要把具体的实现单独放入一个cpp文件当中.因为我们的头文件叫做coordin.h,那么我们与之对应的cpp文件自然就叫做coordin.cpp. 在coordin.h当中我们声明了两个函数,自然我们就要完成这两个函数的实现: #include <cstdio> #include &l

  • 单独编译Android 源代码中的模块实现方法

    第一次下载好Android源代码工程后,我们通常是在Android源代码工程目录下执行make命令,经过漫长的等待之后,就可以得到Android系统镜像system.img了.以后如果我们修改了Android源代码中的某个模块或者在Android源代码工程新增一个自己的模块,是不是还是执行make命令呢?答案是否定的,Google为我们准备了另外的命令来支持编译单独的模块,以及重新打包system.img的命令.在继续学习Android源代码之前,就让我们先来看看这个命令吧. 一. 首先在And

  • asp.net源程序编译为dll文件并调用的实现过程

    很多时候,我们需要将.cs文件单独编译成.dll文件,这就需要使用csc命令将.cs文件编译成.dll动态链接库文件.具体的操作步骤如下: 打开命令窗口->输入cmd到控制台->cd C:WINDOWSMicrosoft.NETFrameworkv1.1.4322 转到vs.net安装的该目录下->执行csc命令csc /target:library File.cs->在该目录下产生一个对应名字的.dll文件(前提:把.cs文件放到C:WINDOWSMicrosoft.NETFra

  • Java中的动态和静态编译实例详解

    Java中的动态和静态编译实例详解 首先,我们来说说动态和静态编译的问题. Q: java和javascript有什么区别?    总结了一下:有以下几点吧: 1.首先从运行环境来说java代码是在JVM上编译成class文件,而javascript则直接在浏览器上加载运行. 2.由第一点可看出,java代码需要编译,而javascript不需要编译. 3.从语言性质来说,java是一种高级编程语言,对变量检查要求严格,javascript只是一个简单的解释性的脚本语言,对变量检查及要求很弱.

  • Linux 6 下编译安装 PHP 5.6实例详解

    Linux 6 下编译安装 PHP 5.6实例详解 PHP(外文名:PHP: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.PHP以其开发源代码,免费,快捷,跨平台,高效,面向对象,强大的动态图像创建等功能深受广大开发者的喜爱.本文描述基于CentOS 6.7下编译安装PHP 5.6.9,同样也适用于CentOS 7下安装. 一.相关依赖包安装

  • CentOS 6.3编译安装LAMP环境笔记

    最近抽空在虚拟机上测试成功了LAMP各个最新版本的整合编译安装,算是把之前的博文整合精简,以下内容均在CENTOS6.3(安装minimal desktop和默认开发包)下测试安装成功,并做了相应优化配置,如有遗漏,还请留言指教.   LINUX操作系统:centOS6.3 64bit(安装了系统默认开发包) APACHE:httpd-2.4.4 MYSQL:mysql-5.6.10 PHP:php-5.4.13 注:推荐安装centos6.3系统时,在系统安装向导中.将默认开发包勾上,避免后期

  • nginx rtmp模块编译 arm版本的问题

    今天搞了一天,终于把nginx增加支持rtmp模块编译出来了,其中遇到了很多问题,记录下这篇文章,希望可以帮到遇到此类问题的同学. 一.准备工作: 1,下载nginx源码:wget http://nginx.org/download/nginx-1.20.2.tar.gz 2,下载依赖库libpcre.a源码:wget http://ftp.cs.stanford.edu/pub/exim/pcre/pcre-8.39.tar.gz 3,下载依赖库libz.a源码: wget https://d

  • nginx rtmp模块编译 arm版本的问题

    目录 一.准备工作: 二.源码编译 1,configure 配置 2,编译错误 三.目标板上执行 今天搞了一天,终于把nginx增加支持rtmp模块编译出来了,其中遇到了很多问题,记录下这篇文章,希望可以帮到遇到此类问题的同学. 一.准备工作: 1,下载nginx源码:wget http://xiazai.jb51.net/202112/yuanma/nginx_jb51.rar 2,下载依赖库libpcre.a源码:wget http://ftp.cs.stanford.edu/pub/exi

  • EasyC++编写头文件

    文章转自公众号:Coder梁(ID:Coder_LT) 我们之前做的左右示例都是在一个单独的cpp文件当中完成的,当我们要做一个相对复杂或大型的项目时,我们显然不能把所有代码都写在一个cpp里.这就需要我们拆分代码,但代码按照逻辑划分,写入不同的cpp文件当中. 在我们编译的时候,我们可以将这些cpp文件分别单独编译,最后再连接到一起.这样做的好处是,当我们只修改了某一个文件的时候,可以只用单独编译那一个文件,不会影响其他文件的编译结果.一般来说大型项目,都会使用一下自动化的编译工具,比如mak

  • C语言关于include顺序不同导致编译结果不同的问题

    目录 编译环境 问题简化 问题分析 总结   今天遇到了因为include顺序不同而编译结果不同的问题.归根结底还是自己写代码的习惯不好导致的. 编译环境   既然要写就多写点吧.最近又开始做TI的DSP C6455相关的开发了.之前的文章里有写到,TI提供有一个CSL库,但是比较老,输出的格式是COFF,而现在一般是ELF.如果做一些新的开发的话,建议重新编译CSL库,并选择输出为ELF格式.   C6000 DSP的编译工具链目前主要有7.4和8.3版本.8.0以上的版本不再支持C6455了

随机推荐