C++ 环境设置

c++基础 › C++ 环境设置 (第 2 章)
文章工具

写 C++ 只需要两样东西:一个能打字的编辑器和一把能把人话翻译成机器话的「翻译器」——本文带你亲手把它们装上,并看清编译这一步到底做了什么。

学完你能做什么

  • 能说清「源代码文件」「编译器」「IDE」三者的分工,并判断自己缺哪一样。
  • 能在自己的系统上验证编译器是否装好(运行 g++ -v 并看懂版本输出)。
  • 能把一个 .cpp 文件编译成可执行程序并运行,看到预期输出。
  • 能解释「预处理 → 编译 → 汇编 → 链接」这四步各自在干什么。
  • 能说出 3 个新手常见的环境配置错误,并知道为什么错。

先建立直觉:菜谱与翻译官

你写的 C++ 代码,本质是一个纯文本文件,就像一份人写的菜谱。CPU 看不懂菜谱,它只认机器指令(一串串数字)。

于是需要一位「翻译官」:编译器。它读走你的菜谱,翻译成 CPU 能执行的机器语言,产出一个可执行程序。你双击或敲命令运行的是翻译结果,而不是菜谱本身。

那编辑器呢?它就是你的纸和笔,只负责把菜谱写下来。编辑器不会翻译,编译器不会打字——这是两件事,别混为一谈。

从最简单的用法开始

先写一个最小程序。把它存成 hello.cpp:

C++ 示例

▶ 在线运行:改一改再点“运行”试试(本站沙箱执行,登录后可运行)。

然后在终端里,用编译器 g++ 编译它,再运行产物(-o hello 意思是「输出文件叫 hello」):

C++ 片段需补全 main() 函数才能运行在实训台打开 →
// 命令行:两条命令,不是 C++ 代码
// $ g++ hello.cpp -o hello
// $ ./hello
// 预期输出:
// Hello, C++

如果第二条命令打印出 Hello, C++,说明你的环境已经能干活了。先别急着追 IDE,命令行跑通一次,你就理解了全流程。

再往下看:编译到底做了什么(原理)(示意图)
图:再往下看:编译到底做了什么(原理)
阶段输入输出典型报错对应命令
预处理.cpp 源文件 + 被 #include 的头文件展开后的翻译单元(文本)找不到头文件:fatal error: iostream: No such fileg++ -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++ 看着是一条命令,内部其实串了四步:

  1. 预处理:把 #include <iostream> 这类指令展开,把头文件内容「贴」进源文件。
  2. 编译:把展开后的代码翻译成汇编代码,同时做语法检查——这一阶段才真正读懂你的 C++。
  3. 汇编:把汇编代码变成机器码,生成目标文件(.o 或 .obj)。
  4. 链接:把目标文件和标准库拼在一起,变成完整的可执行文件。

理解这四步,两个现象就不神秘了:一是「编译错误」和「链接错误」报的时间点不同,前者在前两步,后者在最后一步;二是只写 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。加上几个开关,你会更快发现问题:

C++ 片段需补全 main() 函数才能运行在实训台打开 →
// $ 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」的原因:编译时每个文件各自过关,直到链接时才发现某个函数没人实现。

自测练习

  1. 有人只装了一个编辑器,说「我环境好了」。请指出他缺什么,并说明理由。
  2. 把源文件命名为 main.txt,g++ 往往照样能编译。这说明扩展名属于「语言规则」还是「实现细节」?为什么?
  3. 写出把 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++ 命令把文本变成能运行的程序。

延伸阅读

⚠️ 版权声明

本文为免费文章,欢迎转载。转载请注明出处:一木科技(https://www.pingquan.vip/2026/09/24/cpp-environment-setup/),并保留原文链接。