C++ 编译和概述
g++编译C++程序的四个阶段概述
1. g++编译工具
1.1. linux编译的四个阶段
在Linux下编译程序分为以下4个阶段:
- 预处理:编译处理宏定义等宏命令(eg:#define)——生成后缀为“.i”的文件
- 编译:将预处理后的文件转换成汇编语言——生成后缀为“.s”的文件
- 汇编:由汇编生成的文件翻译为二进制目标文件——生成后缀为“.o”的文件
- 连接:多个目标文件(二进制)结合库函数等综合成的能直接独立执行的执行文件——生成后缀为“.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