文章目录
- C++ 介绍
- C++ 擅长领域
- C++ 程序是如何开发
- 编译器、链接器和库
- 编译预处理
- 编译阶段
- 汇编阶段
- 链接阶段
- 安装集成开发环境 (IDE)
- 配置编译器:构建配置
- 配置编译器:编译器扩展
- 配置编译器:警告和错误级别
- 配置编译器:选择语言标准
C++ 介绍
C++(发音为“see plus plus”)由贝尔实验室的Bjarne Stroustrup开发,作为C的扩展,从1979年开始。C++ 为 C 语言添加了许多新特性,也许最好将其视为 C 的超集,尽管这并不完全正确(因为 C99 引入了一些 C++ 中不存在的功能)。C++之所以声名鹊起,主要是因为它是一种面向对象的语言。至于什么是“对象”,以及它与传统编程方法有何不同,我们将在后面的章节中介绍。
C++在1998年由ISO委员会标准化(这意味着ISO标准委员会批准了描述C++语言的文档,以帮助确保所有编译器都遵守同一组标准)。2003年发布了该语言的一个小更新(称为C++03)。
从那时起,对 C++ 语言进行了五次重大更新(C++11、C++14、C++17、C++20 和 C++23),每次都增加了额外的功能。特别是C++11增加了大量的新功能,并被广泛认为是该语言的新基线版本。预计未来每三年左右对该语言进行一次升级。
该语言的每个新正式版本都称为语言标准(或语言规范)。标准以发布年份命名。例如,没有C++15,因为2015年没有新标准。
C++ 擅长领域
以下是一些最有可能用 C++ 编写的常见应用程序类型:
- 电子游戏
- 实时系统(例如用于运输、制造等)
- 高性能金融应用(例如高频交易)
- 图形化应用和模拟
- 生产力/办公应用
- 嵌入式软件
- 音频和视频处理
- 人工智能和神经网络
C++ 程序是如何开发
下面是一个图形,概述了一种简单的方法:
- 第 1 步:定义要解决的问题
- 第 2 步:确定您将如何解决问题
- 第 3 步:编写程序:
- 编译阶段
- 链接阶段
- 测试程序
编译器、链接器和库
创建三个C++脚本文件:
test.h
int add(int a, int b);
test.cpp
#include "test.h"int add(int a, int b)
{return a + b;
}
main.cpp
#include <iostream>
#include "test.h"int main()
{int sum = add(1, 2);std::cout << "sum: " << sum << std::endl;return 0;
}
然后进行编译,过程步骤:
编译预处理
g++ -E [*.cpp *.h, ...] -o [*.ii],
主要对包含的头文件(#include …), (#define …) 进行处理。
g++ -E test.cpp test.h -o test.ii
在test.ii文件可以查看预处理过程
编译阶段
g++ -S [*.ii ...] -o [*.s]
主要是进行c++的语法检查,检查无误将代码翻译成汇编语言。
g++ -S test.ii -o test.s
汇编阶段
g++ -c [*.s ...] -o [*.o ... ]
将汇编代码生成可以链接的二进制代码。
g++ -c test.s -o test.o
链接阶段
g++ [*.o *.so *.a ...] -o main.exe
链接动态库, 静态库, 可执行.o文件,组成可执行文件。
缺保下面这两步执行,并生成 main.o 和 test.o 文件
g++ test.cpp -c -o test.o
g++ main.cpp -c -o main.o
执行
g++ main.o test.o -o main.exe
生成 main.exe 文件
最后执行,命令行
./main.exe
整个编译过程到这里就结束了。
安装集成开发环境 (IDE)
对于入门来说,使用Visual Studio (for Windows)是很方便的。
我这里使用的VSCode+MinGW,个人习惯罢了。
配置编译器:构建配置
首次运行程序时,在资源管理器窗格中的 .vscode 文件夹下创建了一个名为 tasks.json 的新文件。打开tasks.json文件,找到“args”,然后在该部分中找到“${file}”行。
在“${file}”行上方,在调试时添加包含以下命令(每行一个命令)的新行:
“-ggdb”,
在“${file}”行上方,为发布版本添加包含以下命令(每行一个命令)的新行:
“-O2”,
“-DNDEBUG”,
配置编译器:编译器扩展
禁用编译器扩展,以确保您的程序(和编码实践)保持符合 C++ 标准,并且可以在任何系统上运行。
- 打开tasks.json文件,找到 ,然后找到该部分中的行。“args”“${file}”
- 在该行上方,添加一个包含以下命令的新行:“${file}”
“-pedantic-errors”,
在撰写本文时,VS Code 不会自动在缺少换行符的代码文件的末尾添加换行符(这是 C++ 标准迂腐地要求的)。幸运的是,我们可以告诉 VS Code 这样做:
- 打开 VS Code,然后转到“文件(如果使用 Mac,则为代码)”>“首选项”>“设置”。这将打开一个设置对话框。
- 进入搜索栏。insert final newline
- 在“工作区设置”和“用户设置”选项卡中,确保选中标记为“文件:插入最后换行符”的复选框。
配置编译器:警告和错误级别
将警告级别调到最大,尤其是在学习时。它将帮助您识别可能的问题。
打开tasks.json文件,找到“args”,然后在该部分中找到“${file}”行。
在“${file}”行上方,添加包含以下命令的新行(每行一个):
"-Wall",
"-Weffc++",
"-Wextra",
"-Wconversion",
"-Wsign-conversion",
配置编译器:选择语言标准
下面是代号到最终名称的映射:
c++0x = C++11
c++1y = C++14
c++1z = C++17
c++2a = C++20
c++2b = C++23
C++2c = C++26(尚未最终确定)
对于 VS Code,可以使用编译器标志 、 、 或分别启用 C++11/14/17/20 支持。如果您使用的是 GCC 8 或 9,则需要改用 C++20 支持。“-std=c++11”,“-std=c++14”,“-std=c++17”,“-std=c++20”,“-std=c++2a”,
将适当的语言标准标志(包括双引号和逗号)放在配置文件的 section 中,放在 之前的自己的行上。tasks.json"args"“${file}”
我们还希望将 Intellisense 配置为使用相同的语言标准。对于 C++20,在 中,更改或在其自己的行上添加以下设置:。settings.json"C_Cpp.default.cppStandard": “c++20”