EasyC++,单独编译

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

[[436734]]

大家好,我是梁唐。

想要追求更好阅读体验的同学,可以点击「阅读原文」访问github仓库。

联合编译

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

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

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

  1. #include <cstdio> 
  2. #include <iostream> 
  3. #include <cmath> 
  4. #include "coordin.h" 
  5.  
  6. using namespace std; 
  7.  
  8. polar rect_to_polar(rect xypos) { 
  9.     polar answer; 
  10.     answer.distance = sqrt(xypos.x * xypos.x + xypos.y * xypos.y); 
  11.     answer.angle = atan2(xypos.y, xypos.x); 
  12.     return answer; 
  13.  
  14. void show_polar(polar dapos) { 
  15.     const double rad_to_deg = 57.29577951; 
  16.  
  17.     cout << "distance = " << dapos.distance; 
  18.     cout << ", angle = " << dapos.angle * rad_to_deg; 
  19.     cout << " degress" << endl; 

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

最后我们再来看main函数:

  1. #include "coordin.h" 
  2. using namespace std; 
  3.  
  4. int main() { 
  5.  rect rplace; 
  6.  polar pplace; 
  7.  while (cin >> rplace.x >> rplace.y) { 
  8.   pplace = rect_to_polar(rplace); 
  9.   show_polar(pplace); 
  10.  } 
  11. }    

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

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

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

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

  1. g++ -o coordin.cpp 

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

  1. g++ -o main.cpp 

这样我们就得到了两个.o文件,最后,我们需要把这两个.o文件连接到一起编程一个可执行文件:

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

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

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

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

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

本文转载自微信公众号「Coder梁」,可以通过以下二维码关注。转载本文请联系Coder梁公众号。

 

责任编辑:武晓燕 来源: Coder梁
相关推荐

2021-12-12 18:13:54

C++This指针

2021-12-29 20:31:40

C++多态指针

2021-12-03 10:48:18

Using编译指令

2021-12-09 10:56:50

函数C++原型

2021-12-08 10:43:09

C++实现

2021-12-30 14:58:58

C++函数动态

2021-12-10 10:45:36

C++函数Stock

2021-10-26 00:19:51

C++结构体存储

2021-11-27 11:50:09

C++静态持续

2021-12-11 19:02:03

函数C++对象

2021-11-09 10:38:16

C++Const指针

2021-11-10 10:48:36

C++函数指针

2021-12-05 18:20:42

C++空间特性

2022-01-04 16:35:42

C++Protected关键字

2021-12-15 10:25:57

C++运算符重载

2021-10-26 15:36:17

C++枚举值类型

2021-10-27 16:27:20

C++指针操控

2021-12-16 10:40:11

C++运算符重载

2021-11-26 10:56:28

C++存储持续性

2021-10-21 18:52:00

C++数组存储
点赞
收藏

51CTO技术栈公众号