less than 1 minute read

g++编译C++程序的四个阶段概述

1. g++编译工具

1.1. linux编译的四个阶段

在Linux下编译程序分为以下4个阶段:

  1. 预处理:编译处理宏定义等宏命令(eg:#define)——生成后缀为“.i”的文件   
  2. 编译:将预处理后的文件转换成汇编语言——生成后缀为“.s”的文件   
  3. 汇编:由汇编生成的文件翻译为二进制目标文件——生成后缀为“.o”的文件   
  4. 连接:多个目标文件(二进制)结合库函数等综合成的能直接独立执行的执行文件——生成后缀为“.out”的文件

1.2. Linux下执行gcc与g++编译C++文件的差别

后缀为.c的,gcc把它当作是C程序(cc/cpp才判定为C++源程序),而g++当作是c++程序

gcc无法进行库文件的连接,即无法编译完成步骤4;而g++则能完整编译出可执行文件。(实质上,g++从步骤1-步骤3均是调用gcc完成,步骤4连接则由自己完成),如以下:

  gcc -E 执行到步骤1,只处理宏命令,需要用重定向生成文件

  gcc -S 执行到步骤2,生成文件.s

  gcc -c 执行到步骤3,生成文件.o

  g++ 分别编译于连接 .cc文件与.o文件

1.2.1. Tips

  • 后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。
  • 编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。

1.3. 安装使用g++

除了code blocks, Vs code,可以更简单的使用gcc g++编译c和c++语言。

安装:
sudo apt-get install g++

编译: g++ getinfo.cpp 生成a.out,使用./a.out执行 或者 g++ getinfo.cpp -o getinfo 生成getinfo,使用./getinfo执行

2. input and output

//getinfo .cpp -- input and output
#include<iostream>

int main() {
        using namespace std;

        int carrots;

        cout << "How many carrots do you have?" << endl;
        cin >> carrots;
        cout << "Here are two more.";
        carrots = carrots + 2;
 
        cin.get();
        cin.get();   //添加两句,第一句按enter键位输入数字,第二条让程序暂停
        //FIXME the next line concatenates output
        cout << "Now you have" << carrots << " carrots." << endl;
        return 0;
}

cin >> carrots;
从键盘输入数值赋给变量carrots

cout << "Now you have" << carrots << " carrots." << endl;
使用cout拼接,endl换行。

3. 类class

类是c++种面向对象编程OOP的核心概念之一

  • 类是用户定义的一种数据类型
  • 定义类,需要描述它能够表达什么信息和可对数据执行那哪些操作
  • 类定义描述的是数据格式及其用法,而杜希昂是根据数据格式规范创建的实体

    例如cout是一个ostream类对象,cin是一个istream类对象,都是在iostream中定义的。

4. 函数

函数创建C++程序的模块,分为两种:有返回值的和无返回值的。
例如:

#include<cmath>
double x;
x = sqrt(6.25);   

Leave a comment