01 C++ 环境搭建与编译原理入门

GESP 1 级

级别标注:GESP 1 级(考级要求)/ 科普向(竞赛无单独考题,但为 C++ 调试基础)。

一、C++ 是什么

C++ 是一种编译型高级语言,由 C 语言发展而来,兼具"高性能"与"面向对象"能力。信息学竞赛(CSP-J / NOIP)与 GESP 考级主流使用 C++。它相比 Python 速度更快,更适合算法题。

形象理解把 C++ 想象成手动挡赛车:速度快、性能强,但换挡、离合都要自己控制;Python 像自动挡家用车,好开但跑不快。竞赛和考级比的是极限速度与精确控制,所以统一用 C++。
考级视角GESP 1 级不直接考语言对比,但“编译型语言需先编译再运行”是选择题常见的背景知识,务必记住 C++ 属于编译型语言。

二、开发环境搭建

用途 推荐软件 说明
日常学习 Dev-C++ 5.11+ 轻量,CSP-J 官方常用;注意在"编译器选项"里加 -std=c++17
竞赛对拍 Code::Blocks / Visual Studio Code 功能更强
正式考试 考场指定 OJ(在线评测) 无需本地环境

安装要点: - Dev-C++ 安装后必须修改编译器标准:工具 → 编译器选项 → 编译时加入命令:-std=c++17。 - 编码统一使用 UTF-8(Dev-C++ 默认可能为 GBK,中文注释可能乱码,不影响编译)。

易错点Dev-C++ 默认编译器标准可能是旧版,不设置 -std=c++17 时,for (int i = 0; ...) 局部声明、auto 等新特性会莫名报错。这不是你写错了,是编译器太老——装好后第一件事就是改编译器选项。
考级视角考级机考使用考场 OJ(在线评测),不依赖本地环境;但平时必须把“新建文件 → 写码 → 编译 → 运行”流程练到形成肌肉记忆,考试时才不会在环境操作上浪费时间。

三、一个标准 C++17 程序结构

C++ 实例
#include <iostream>   // 引入输入输出流头文件
#include <algorithm>  // 引入算法库(用不到可省略)
using namespace std;  // 使用标准命名空间

int main() {          // 主函数,程序入口
    // 程序代码写在这里
    return 0;         // 返回 0 表示正常结束
}
形象理解程序结构像厨房开工:#include 是“备齐食材厨具”(引入头文件);using namespace std; 是“把常用工具摆到手边”(省写 std:: 前缀);main 是“主厨开工台”;return 0; 是“向老板汇报顺利收工”。
易错点return 0; 漏写或写成 return; 在部分 OJ 上不会报错,但会引入警告;养成 main 永远 return 0; 的习惯,能让编译器帮你挡住更多潜在问题。

四、编译与运行过程(四步链)

C++ 从源代码到可执行程序经历:

  1. 预处理:处理 #include、#define 等(把头文件内容展开进源码)。
  2. 编译:把 C++ 源码翻译成汇编/机器码(.obj / .o 目标文件)。
  3. 链接:把多个目标文件与库函数链接成可执行文件(.exe)。
  4. 运行:执行程序。

记忆口诀:预编译 → 编译 → 链接 → 运行。

命令行编译示例(供进阶老师使用)

终端
# Linux / macOS / Windows(WSL)
g++ -std=c++17 main.cpp -o main
./main
形象理解四步链像汽车工厂流水线:预处理 = 拆快递盒(展开 #include 内容)→ 编译 = 把图纸翻译成零件(机器码)→ 链接 = 把零件组装成整车(.exe)→ 运行 = 开车上路。
考级视角GESP 1 级偶有“哪一步把源代码翻译成机器码”之类的常识题,答案选编译;平时把四步链背熟,遇到就能秒答。

五、常见编译错误与调试入门

错误现象 常见原因
undeclared identifier 变量未定义 / 拼写错误 / 忘写头文件
expected ';' 漏写分号
main must return int 写了 void main()(错误)应写 int main()
no matching function 函数名拼错或参数类型错误
中文乱码 编码不一致(GBK/UTF-8)

调试手段: - 输出调试:在关键位置 cout << 变量 << endl; 观察中间值(新手最实用)。 - 断点调试:IDE 中打红点,单步执行观察变量(Dev-C++ 用 F8)。

易错点看到 expected ';' 报错,先看上一行的末尾而不是报错行本身——编译器常把“漏分号”定位到下一行。这一招能省掉新手一半的排错时间。
形象理解编译器报错像导航提示:第一条报错往往才是根因,后面跟着的错误多是连锁反应。先修第一条,再重新编译,不要一次性改所有报错。

六、易错点 / 常见坑点

  • ⚠️ 主函数必须返回 int,不要用 void main()。
  • ⚠️ 每条语句必须以分号结尾(return 0; 也不能漏)。
  • ⚠️ 花括号 {} 必须成对出现,建议写代码时先写 {} 再填空。
  • ⚠️ 头文件写错(如把 iostream 写成 iostream.h)在 C++17 下会报错。
  • ⚠️ 用 cin/cout 必须写 #include <iostream> 和 using namespace std;(或用 std::cin)。

七、考级要求 vs 竞赛进阶

  • 考级要求(GESP 1 级):会搭建环境、写标准框架、认识编译错误、能运行第一个 Hello World。
  • 竞赛进阶(CSP-J/NOIP):不考环境本身,但要求掌握"命令行编译 + 多文件 + 对拍"等效率手段,详见第 19、20 章。

八、课内练习建议

  1. 输出 Hello, World!。
  2. 故意删掉一个分号,观察编译报错并修复。
  3. 把 iostream 头文件删掉重编,体会报错信息。
本章目录
一、C++ 是什么 二、开发环境搭建 三、一个标准 C++17 程序结构 四、编译与运行过程(四步链) 五、常见编译错误与调试入门 六、易错点 / 常见坑点 七、考级要求 vs 竞赛进阶 八、课内练习建议