C++ 环境设置
写 C++ 只需要两样东西:一个能打字的编辑器和一把能把人话翻译成机器话的「翻译器」——本文带你亲手把它们装上,并看清编译这一步到底做了什么。
学完你能做什么
- 能说清「源代码文件」「编译器」「IDE」三者的分工,并判断自己缺哪一样。
- 能在自己的系统上验证编译器是否装好(运行
g++ -v并看懂版本输出)。 - 能把一个
.cpp文件编译成可执行程序并运行,看到预期输出。 - 能解释「预处理 → 编译 → 汇编 → 链接」这四步各自在干什么。
- 能说出 3 个新手常见的环境配置错误,并知道为什么错。
先建立直觉:菜谱与翻译官
你写的 C++ 代码,本质是一个纯文本文件,就像一份人写的菜谱。CPU 看不懂菜谱,它只认机器指令(一串串数字)。
于是需要一位「翻译官」:编译器。它读走你的菜谱,翻译成 CPU 能执行的机器语言,产出一个可执行程序。你双击或敲命令运行的是翻译结果,而不是菜谱本身。
那编辑器呢?它就是你的纸和笔,只负责把菜谱写下来。编辑器不会翻译,编译器不会打字——这是两件事,别混为一谈。
从最简单的用法开始
先写一个最小程序。把它存成 hello.cpp:
▶ 在线运行:改一改再点“运行”试试(本站沙箱执行,登录后可运行)。
然后在终端里,用编译器 g++ 编译它,再运行产物(-o hello 意思是「输出文件叫 hello」):
// 命令行:两条命令,不是 C++ 代码
// $ g++ hello.cpp -o hello
// $ ./hello
// 预期输出:
// Hello, C++如果第二条命令打印出 Hello, C++,说明你的环境已经能干活了。先别急着追 IDE,命令行跑通一次,你就理解了全流程。
| 阶段 | 输入 | 输出 | 典型报错 | 对应命令 |
|---|---|---|---|---|
| 预处理 | .cpp 源文件 + 被 #include 的头文件 | 展开后的翻译单元(文本) | 找不到头文件:fatal error: iostream: No such file | g++ -E hello.cpp |
| 编译 | 预处理后的代码 | 汇编代码 .s | 语法 / 类型错误:expected ';' | g++ -S hello.cpp |
| 汇编 | 汇编代码 .s | 目标文件 .o(Windows 为 .obj) | 极少见,通常是内联汇编写错 | g++ -c hello.cpp |
| 链接 | 一个或多个目标文件 + 标准库 | 可执行文件 | undefined reference to ... | g++ hello.o -o hello |
口诀:预处理「贴头文件」,编译「读懂 C++」,汇编「出机器码」,链接「拼成程序」——报错出现在哪一步,就知道毛病在哪一步。
再往下看:编译到底做了什么(原理)
g++ 看着是一条命令,内部其实串了四步:
- 预处理:把
#include <iostream>这类指令展开,把头文件内容「贴」进源文件。 - 编译:把展开后的代码翻译成汇编代码,同时做语法检查——这一阶段才真正读懂你的 C++。
- 汇编:把汇编代码变成机器码,生成目标文件(
.o或.obj)。 - 链接:把目标文件和标准库拼在一起,变成完整的可执行文件。
理解这四步,两个现象就不神秘了:一是「编译错误」和「链接错误」报的时间点不同,前者在前两步,后者在最后一步;二是只写 g++ -c 时会停在目标文件,不生成可执行程序。
这里要分清两类知识。语言规则是 C++ 标准规定的,比如 int main() 是程序入口、#include 要写在文件开头。实现细节是编译器自己决定的,比如「源文件默认扩展名是 .cpp」——这并非 C++ 标准要求,而是 g++ 的约定。所以你把文件命名为 a.txt 它多半也能编过,但请不要这么干,扩展名是给人看的路标。
对比
| 角色 | 负责什么 | 典型例子 |
|---|---|---|
| 文本编辑器 | 把源代码写成文本文件 | vim、Notepad、VS Code |
| 编译器 | 把源代码翻译成可执行程序 | g++、clang++、cl |
| IDE | 编辑器 + 编译器 + 调试器打包 | Visual Studio |
口诀:编辑器管「写」,编译器管「译」,IDE 是打包一条龙。 先用命令行学会「写 + 译」,之后再上 IDE,你才不会被一键运行的假象骗过去。
实战:从零跑通 Hello
Linux / UNIX:先检查是否已装好,终端执行 g++ -v。它会把内置配置和版本号打印出来,例如 gcc version ...;看到版本号就说明能用了。若提示未找到命令,用包管理器装编译工具链(Debian 系是 sudo apt install build-essential ),或参考 gcc.gnu.org 的安装说明。
macOS:安装苹果的 Xcode 开发工具后即可使用其命令行编译工具(默认是 clang,命令仍叫 g++)。下载见 developer.apple.com。
Windows:装 MinGW-w64,它把 GNU 的 C/C++ 工具带到了 Windows。主页 mingw-w64.org,安装包的命名形如 MinGW-<version>.exe。安装时至少要勾 gcc-core、gcc-g++、binutils 和 runtime。装完后,关键一步是把它 bin 子目录加进 PATH 环境变量——PATH 就是操作系统查找命令的「通讯录」,不加进去,命令行就找不到 g++。
完成后在终端敲 g++ --version,有版本号即成功。顺便提醒:gcc 是 C 与 C++ 共用的驱动名字,写 C++ 请优先用 g++,它会自动链接 C++ 标准库。
| 现象 | 根本原因 | 正确做法 |
|---|---|---|
| 只装了 VS Code 却写不了 C++ | 编辑器不会翻译,缺编译器 | 另装 g++ / clang++ / cl,先用命令行跑通一次 |
源文件存成 .c | .c 是 C 的约定后缀,可能被当 C 编译 | C++ 用 .cpp、.cp 或 .cxx |
写成 #include <iostream.h> | 那是早期的非标准写法 | 现代标准写 #include <iostream> |
| 装了 MinGW 仍提示「不是内部或外部命令」 | 其 bin 目录没加进 PATH | 把 MinGW 的 bin 加进 PATH,重开终端再试 |
写 C++ 却用 gcc 编译后报链接错误 | gcc 不会自动链接 C++ 标准库 | 写 C++ 优先用 g++ |
口诀:「编译错误」在前期,「链接错误」在最后;找不到命令先查 PATH,写 C++ 就找 g++。
易错点(先错后对)
- 错:只装了 VS Code 就想写 C++。 对:VS Code 只是编辑器,你还得另装编译器;编辑器不负责翻译。
- 错:把源文件存成
.c。 对:.c是 C 的约定后缀,C++ 请用.cpp、.cp或.cxx,否则可能被当成 C 来编译。 - 错:代码写成
#include <iostream.h>。 对:那是很久以前的写法,现代标准是#include <iostream>。 - 错:装了 MinGW 但还是报「不是内部或外部命令」。 对:这几乎一定是 PATH 没配好,而不是没装成功。
再深入一点:让编译更可控
别停留在 g++ hello.cpp。加上几个开关,你会更快发现问题:
// $ g++ -std=c++17 -Wall -Wextra hello.cpp -o hello
// -std=c++17:指定使用哪一版语言标准
// -Wall -Wextra:打开常见警告,警告往往是 bug 的前奏
// -o hello:指定输出文件名当程序变多,你会写多个 .cpp,此时可以分步编译:先 g++ -c a.cpp 生成 a.o,最后一起链接。这一步也解释了「链接阶段才报 undefined reference」的原因:编译时每个文件各自过关,直到链接时才发现某个函数没人实现。
自测练习
- 有人只装了一个编辑器,说「我环境好了」。请指出他缺什么,并说明理由。
- 把源文件命名为
main.txt,g++往往照样能编译。这说明扩展名属于「语言规则」还是「实现细节」?为什么? - 写出把
hello.cpp编译成可执行文件hello并运行的命令,并说明-o的作用。
参考答案
1. 他缺编译器。编辑器只负责把代码写成文本文件,机器看不懂这份文本;必须有编译器把它翻译成机器语言并产出可执行程序。
2. 属于实现细节。C++ 标准规定的是语法和语义,并不强制文件后缀;g++ 只是默认按 C++ 处理并约定 .cpp。但后缀是给人看的路标,团队协作中应按约定命名,不要让工具去猜。
3. 编译:g++ hello.cpp -o hello;运行:Linux/macOS 用 ./hello,Windows 用 hello.exe。-o 用来指定输出文件的名字,不加时通常默认产出 a.out(Windows 上是 a.exe)。
一句话记住
编辑器负责「写」,编译器负责「译」,你的第一课不是配置 IDE,而是亲手让一条 g++ 命令把文本变成能运行的程序。
延伸阅读
- main 函数(程序入口)—— cppreference 中文
- #include 预处理指令 —— cppreference 中文
- 标准头文件 <iostream> —— cppreference 中文
- 编译器对标准特性的支持情况 —— cppreference 中文
本文为免费文章,欢迎转载。转载请注明出处:一木科技(https://www.pingquan.vip/2026/09/24/cpp-environment-setup/),并保留原文链接。
还没有评论,来说两句?