NOI C++ 课程体系 / 计算机基础 / 第4讲
CSP-J 入门级 · 计算机基础 · m1-04

IDE与编译工具 实战

从 Dev-C++ 到 g++ 命令行 —— 掌握信息学竞赛中必备的开发环境与编译工具,让你的第一个 C++ 程序跑起来!

6 大模块 3 大IDE实战 8 个核心快捷键 5 大易错点 12 道分层练习
本讲 · 第 4/56 讲IDE 与编译工具实战
模块 01

情景导航

从"第一次编译失败"的故事开始,理解 IDE 和编译工具的重要性。

故事小明的第一次编译失败

小明终于写好了人生中第一个 C++ 程序 —— Hello World。他兴奋地按下"运行"按钮,结果……

❌ "编译错误:第3行,缺少分号"

小明检查了半天,才发现自己把分号写成了中文的";"而不是英文的";"。

修复后再次运行,又报错:"找不到 iostream 头文件"。原来他的 Dev-C++ 没有正确安装编译器。

"IDE 就像你的编程工作台,工具没摆好,什么都干不了!"

在老师的帮助下,小明重新配置了 Dev-C++,终于看到了屏幕上出现 "Hello, World!" 的那一刻,他激动得差点跳起来!🎉

💡 IDE 帮你做了什么?

如果没有 IDE,你需要手动执行 4 个步骤:打开文本编辑器写代码 → 打开终端输入编译命令 → 运行生成的exe → 查看结果。而 IDE 把这一切整合到了一键操作中。

IDE = 编辑器 + 编译器 + 调试器 + 文件管理

①生活类比:IDE 就像一个全能厨房
📝

记事本 = 菜刀

最基本的工具,什么都能做但效率低。

→ 纯文本编辑器
🧰

IDE = 整体厨房

灶台、冰箱、刀具一应俱全,一站式完成。

→ 集成开发环境
🔥

编译器 = 灶台

把"食材"(源代码)加工成"菜品"(可执行程序)。

→ g++ / gcc
🔍

调试器 = 品尝勺

帮你边做边尝,找出"味道不对"(bug)的原因。

→ GDB 调试器
②编程定义

IDE(Integrated Development Environment,集成开发环境):将代码编辑、编译、调试、运行等功能集成在一起的软件工具。

g++:GNU 编译器套件中的 C++ 编译器,是 NOI 竞赛的官方指定编译器。

📌 本讲核心知识地图

板块核心内容对应大纲
IDE 概览Dev-C++、Code::Blocks、VS CodeWindows/Linux 下的 IDE
Dev-C++ 实战新建/编译/运行/调试全流程使用 Dev-C++ 等 IDE
Code::BlocksLinux 下的操作要点使用 Code::Blocks
g++ 命令行编译选项、常见参数常用编译命令 g++ 的基本使用
文件管理新建/复制/删除/移动文件与目录图形界面文件操作
③核心口诀
🔑 IDE 操作三步曲

新建文件写代码,保存命名加 .cpp;
编译检查找错误,运行输出看结果;
出错别慌看提示,行号定位改得快!

🔑 g++ 编译命令

g++ hello.cpp -o hello 编译生成exe;
-O2 开优化跑得快,-std=c++17 新标准;
-Wall 显示所有警告,好习惯养成不能忘!

🔑 竞赛必备快捷键

Ctrl+S 保存,Ctrl+Z 撤销;
F9 编译,F10 运行,F11 编译并运行;
Ctrl+/ 注释/取消注释!

模块 02

知识探究

掌握三大 IDE 的使用方法、g++ 命令行操作和文件管理技能。

1IDE 概览:三大主流选择

信息学竞赛中常用的 IDE 有以下三种,各有优缺点:

🪟 Dev-C++ 入门首选
  • Windows 平台
  • 体积小巧(~50MB)
  • 内置 MinGW(gcc/g++)
  • 操作简单,适合初学者
  • NOI 官方推荐(Windows)
  • 缺点:功能较基础
🐧 Code::Blocks 竞赛标配
  • 跨平台(Win/Linux/Mac)
  • NOI Linux 内置
  • 功能丰富,插件多
  • 支持项目管理
  • NOI 官方推荐(Linux)
  • 缺点:界面略旧
💎 VS Code 进阶推荐
  • 微软出品,跨平台
  • 代码智能补全最强
  • 海量插件生态
  • 日常开发主流工具
  • 需自行配置编译器
  • 缺点:配置稍复杂
IDE平台编译器适合场景NOI 竞赛
Dev-C++Windows内置 MinGW入门学习、日常练习✅ Windows 推荐
Code::Blocks全平台需配置 gcc竞赛练习、省选✅ Linux 标配
VS Code全平台需自行配置日常开发、进阶学习⚠️ 需手动配置
NOI LinuxLinuxg++ 内置NOI 官方赛场环境🏆 比赛必用
2Dev-C++ 实战操作

Dev-C++ 是 Windows 下最常用的竞赛 IDE,下面是完整的操作流程:

1
📄
新建文件

文件 → 新建 → 源代码
Ctrl+N

2
✏️
编写代码

在编辑器中输入 C++ 代码
支持语法高亮

3
💾
保存文件

文件 → 保存(加 .cpp 后缀)
Ctrl+S

4
⚙️
编译运行

运行 → 编译并运行
F11

Dev-C++ 5.11 — hello.cpp
📁 项目文件
📄 hello.cpp
📄 input.txt
📄 output.txt
⚙️ 编译器
MinGW (gcc 9.2)
C++17 标准
1#include <iostream>
2using namespace std;
3
4int main() {
5 cout << "Hello, World!" << endl;
6 return 0;
7}
行 5, 列 12 | UTF-8 编译成功 ✅ | 0 错误, 0 警告

📋 Dev-C++ 常用快捷键

快捷键功能说明
Ctrl+N新建文件创建空白源文件
Ctrl+S保存养成随时保存的好习惯
Ctrl+Z撤销后悔药,最多撤销数百步
Ctrl+Y重做撤销的撤销
F9仅编译检查语法错误,不运行
F10仅运行运行上次编译的exe
F11编译并运行最常用!一步到位
Ctrl+/注释/取消快速注释选中的代码
🔑 Dev-C++ 编译设置

工具 → 编译选项 → 加入以下参数:
-O2 -std=c++17 -Wall
-O2:开启优化(竞赛推荐)
-std=c++17:使用 C++17 标准
-Wall:显示所有警告(帮你发现潜在问题)

3Code::Blocks 实战(Linux / Windows)

Code::Blocks 是 NOI Linux 环境下的标配 IDE,也是跨平台的选择:

🪟 Windows 下使用
  • 下载带 MinGW 的版本
  • Settings → Compiler → 选择 GNU GCC
  • 编译选项加入 -O2 -std=c++17
  • Build → Build and Run (F9)
🐧 Linux 下使用 (NOI赛场)
  • NOI Linux 已预装 Code::Blocks
  • 编译器默认 g++(无需配置)
  • 终端也可直接用 g++ 命令
  • Build → Build and Run (F9)

💡 NOI 赛场环境须知

NOI 竞赛使用 NOI Linux(基于 Ubuntu),预装了 Code::Blocks 和 g++。

赛场上你也可以直接用终端命令行编译运行(推荐,更灵活)。

建议平时就在 Linux 环境下练习,熟悉命令行操作!

4g++ 命令行详解 竞赛必备

在竞赛中,直接使用 g++ 命令行比 IDE 更高效。以下是核心命令:

终端g++ 常用命令
# 1. 基础编译(最常用)
g++ hello.cpp -o hello

# 2. 竞赛推荐编译(带优化和标准)
g++ -O2 -std=c++17 hello.cpp -o hello

# 3. 开启所有警告
g++ -Wall -O2 -std=c++17 hello.cpp -o hello

# 4. 仅预处理(查看展开后的代码)
g++ -E hello.cpp -o hello.ii

# 5. 仅编译不链接
g++ -c hello.cpp -o hello.o

# 6. 编译多个源文件
g++ main.cpp utils.cpp -o program

# 7. 运行编译后的程序
./hello

# 8. 使用文件重定向输入输出
./hello < input.txt > output.txt
选项全称功能竞赛用途
-ooutput指定输出文件名g++ a.cpp -o a
-O2Optimize level 2开启二级优化提升运行速度
-std=c++17Standard指定C++标准版本使用新特性
-WallWarning all显示所有警告发现潜在问题
-EPreprocess仅预处理调试宏展开
-cCompile only仅编译不链接多文件项目
-gDebug info加入调试信息配合 GDB 调试
-lmLink math链接数学库使用 math.h 函数
🔑 竞赛万能编译命令

g++ -O2 -std=c++17 -Wall main.cpp -o main

这条命令 = 优化 + C++17标准 + 全部警告,适用于 99% 的竞赛场景。

5文件管理操作

竞赛中需要管理源文件、输入文件、输出文件,掌握基本的文件操作很重要:

🪟 Windows 图形界面
  • 新建:右键 → 新建 → 文本文件
  • 重命名:F2 或右键 → 重命名
  • 复制:Ctrl+C / Ctrl+V
  • 删除:Delete(回收站)/ Shift+Delete(永久)
  • 移动:拖拽 或 Ctrl+X / Ctrl+V
  • 新建文件夹:右键 → 新建 → 文件夹
🐧 Linux 命令行
  • 新建文件:touch hello.cpp
  • 新建目录:mkdir project
  • 复制:cp a.cpp b.cpp
  • 移动/重命名:mv old.cpp new.cpp
  • 删除:rm hello.cpp
  • 删除目录:rm -r project
  • 列目录:ls -la
操作WindowsLinux 命令
查看当前目录地址栏pwd
列出文件资源管理器ls -la
切换目录双击文件夹cd 目录名
返回上级点击 "↑"cd ..
创建文件右键 → 新建touch file.cpp
创建目录右键 → 新建文件夹mkdir dir
复制文件Ctrl+C / Ctrl+Vcp src dst
删除文件Deleterm file
案例案例1:竞赛完整工作流 实战

模拟一场 CSP-J 复赛的完整操作流程:

终端完整竞赛工作流
# ① 创建工作目录
mkdir csp-j
cd csp-j

# ② 编写第一题代码
vim t1.cpp    # 或用 Code::Blocks 打开

# ③ 编译(竞赛推荐参数)
g++ -O2 -std=c++17 -Wall t1.cpp -o t1

# ④ 用样例测试
./t1 < t1_sample1.in
# 检查输出是否与样例答案一致

# ⑤ 用文件重定向正式运行
./t1 < t1.in > t1.out

# ⑥ 检查结果
cat t1.out

# ⑦ 继续做下一题
vim t2.cpp
g++ -O2 -std=c++17 -Wall t2.cpp -o t2
C++t1.cpp — 竞赛标准模板
#include <cstdio>
#include <iostream>
using namespace std;

int main() {
    // 文件重定向(根据题目要求修改文件名)
    freopen("t1.in", "r", stdin);
    freopen("t1.out", "w", stdout);

int a, b;
    cin >> a >> b;
    cout << a + b << endl;

return 0;
}
运行结果
输入 (t1.in):  3 7
输出 (t1.out): 10
🔑 竞赛文件命名规范

每题一个目录,包含:
t1.cpp(源文件)、t1.in(输入文件)、t1.out(输出文件)
文件名必须与题目要求完全一致,大小写也要匹配!

模块 03

实践应用

通过实操题目,巩固 IDE 操作和 g++ 命令的使用。

题1快捷键匹配

题目:将以下操作与对应的快捷键配对:

A. 编译并运行   B. 保存文件   C. 撤销   D. 注释选中代码

① Ctrl+Z   ② F11   ③ Ctrl+/   ④ Ctrl+S

查看参考答案

A → ② (F11 = 编译并运行)

B → ④ (Ctrl+S = 保存)

C → ① (Ctrl+Z = 撤销)

D → ③ (Ctrl+/ = 注释/取消注释)

题2编译命令选择

题目:你需要编译一个名为 main.cpp 的竞赛程序,要求开启 O2 优化、使用 C++17 标准、显示所有警告、输出文件名为 main。请写出完整的 g++ 命令。

查看参考答案

g++ -O2 -std=c++17 -Wall main.cpp -o main

各参数说明:

• -O2:二级优化,提升运行速度

• -std=c++17:使用 C++17 标准

• -Wall:显示所有编译警告

• -o main:指定输出文件名为 main

题3错误排查实战

题目:以下代码在 Dev-C++ 中按 F11 编译报错,请找出所有错误:

C++有错误的代码
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;
    int sum = 0;
    for(int i = 1; i <= n; i++) {
        sum += i;
    }
    cout << sum << endl
    return 0;
}
查看参考答案

错误1(第12行):cout << sum << endl 后面缺少分号 ;

修正为:cout << sum << endl;

排查技巧:编译器报"第13行错误"时,实际错误往往在上一行(缺少分号导致编译器一直往下找)。

经验法则:看到"expected ';' before ...",先检查前一行的末尾!

模块 04

总结提升

1核心要点总结
知识点必须记住的核心
IDE 选择Windows → Dev-C++;Linux/竞赛 → Code::Blocks;日常 → VS Code
Dev-C++ 操作新建(Ctrl+N) → 编写 → 保存(Ctrl+S) → 编译运行(F11)
Code::BlocksNOI Linux 标配,Build and Run (F9)
g++ 核心命令g++ -O2 -std=c++17 -Wall main.cpp -o main
-O2 选项开启二级优化,提升程序运行速度
-std=c++17使用 C++17 标准(支持结构化绑定等新特性)
-Wall显示所有警告,帮助发现潜在问题
文件管理mkdir/cd/cp/mv/rm(Linux)、资源管理器(Windows)
竞赛工作流编写 → 编译 → 用样例测试 → 正式运行 → 检查输出
2拓展:现代 IDE 与工具

💡 VS Code 配置指南(日常开发推荐)

第一步:安装 VS Code + C/C++ 扩展(微软官方)

第二步:安装 MinGW-w64(Windows)或使用系统 g++(Linux/Mac)

第三步:配置 tasks.json(编译任务)和 launch.json(调试配置)

第四步:安装推荐扩展:Code Runner、CMake Tools、GitLens

注意:竞赛考场上不提供 VS Code,所以仍需熟练使用 Dev-C++ 或 Code::Blocks!

🏆 竞赛考场环境
  • NOI Linux (Ubuntu 20.04)
  • Code::Blocks 20.03
  • g++ 9.3.0
  • vim/nano 文本编辑器
  • 不支持 VS Code 等第三方软件
💎 日常开发推荐
  • VS Code + C/C++ 扩展
  • CLion(JetBrains 出品)
  • Visual Studio(Windows 大型项目)
  • Xcode(Mac 开发)
  • GitHub Copilot(AI 辅助编码)
3思考与启发

💡 学完本讲,你应该掌握的5项技能

1. 能在 Dev-C++ 中新建、保存、编译、运行 C++ 程序。

2. 能使用 g++ 命令行编译,并理解 -O2 -std=c++17 -Wall 的含义。

3. 能在 Windows 和 Linux 下进行基本文件管理操作。

4. 能看懂编译器的错误提示,根据行号定位并修复错误。

5. 能完成竞赛完整工作流:编写 → 编译 → 测试 → 提交。

模块 05

学习检测

5 个初学者最常犯的错误,提前避开少走弯路。

易错1

文件保存没加 .cpp 后缀

❌ 错误
保存为 hello.txt 或 hello(无后缀)
→ 编译器无法识别为C++源文件
✅ 正确
保存为 hello.cpp
→ 编译器通过后缀名识别语言类型
口诀:C++文件必须以 .cpp 结尾,就像写信要有落款!
易错2

编译成功后找不到 exe 文件

❌ 错误
没有保存文件就编译,或不知道 exe 生成在哪个目录。
✅ 正确
① 先保存再编译;② exe 默认生成在源文件同目录下;③ 用 g++ -o 指定输出路径。
口诀:先保存、再编译、exe 在同目录!
易错3

中文标点导致编译错误

❌ 错误
cout << "Hello" << endl;(中文分号)
使用了中文括号()或中文引号""
✅ 正确
cout << "Hello" << endl;(英文分号)
所有标点必须使用英文半角字符
口诀:代码只认英文标点,中文符号统统不行!切输入法!
易错4

编译报错时只看最后一行

❌ 错误
编译器报了10个错误,只看最后一个,越改越乱。
✅ 正确
从第一个错误开始修复!很多后续错误是由前面的错误"级联"引起的,修好第一个,后面可能全消失。
口诀:错误从第一个改,一个修好十个消!
易错5

竞赛时忘记文件重定向

❌ 错误
题目要求从 prob.in 读入、输出到 prob.out,但忘记加 freopen,结果 0 分。
✅ 正确
开考前先读题目要求的文件名,在 main() 开头加上:
freopen("prob.in","r",stdin);
freopen("prob.out","w",stdout);
口诀:拿到题目先看文件名,freopen 两行不能忘!
速查IDE 与编译工具速查表
类别命令/操作说明
编译命令g++ -O2 -std=c++17 -Wall a.cpp -o a竞赛万能编译
运行程序./aLinux 运行
文件重定向./a < in.txt > out.txt命令行重定向
Dev-C++ 编译F11编译并运行
Dev-C++ 保存Ctrl+S保存文件
Code::BlocksF9Build and Run
注释代码Ctrl+/快速注释/取消
Linux 建目录mkdir dir创建目录
Linux 复制cp src dst复制文件
Linux 删除rm file删除文件
📌知识点笔记卡

🖥️ IDE 选择

Windows → Dev-C++

Linux/竞赛 → Code::Blocks

日常开发 → VS Code

⚙️ 编译命令

g++ -O2 -std=c++17

-Wall main.cpp -o main

这是竞赛万能命令

⌨️ 核心快捷键

F11 = 编译并运行

Ctrl+S = 保存

Ctrl+Z = 撤销

📁 文件管理

mkdir 创建目录

cd 切换目录

cp/mv/rm 复制移动删除

🏆 竞赛工作流

① 读题→② 编码

③ 编译→④ 样例测试

⑤ 正式运行→⑥ 检查

🔑 避坑指南

.cpp后缀不能忘

代码只用英文标点

错误从第一个改起

课后练习

分层练习作业

A基础 / B提高 / C挑战,难度递增,点击展开答案与解析。

🟢 A组 · 基础(4题)

A1选择题

以下哪个不是 IDE(集成开发环境)?

A. Dev-C++   B. Code::Blocks   C. g++   D. Visual Studio

查看参考答案

答案:C. g++

g++ 是编译器(只负责将源代码翻译成机器码),不是 IDE。IDE 是集成编辑、编译、调试等功能的完整工具。Dev-C++、Code::Blocks、Visual Studio 都是 IDE。

考点:IDE 是集成编辑器、编译器、调试器等工具的完整环境,编译器本身(g++、gcc)不属于 IDE。

易错:因为 Dev-C++ 内部调用 g++,就把 g++ 也当成 IDE;或误认为 Visual Studio 体积大、不像 IDE。

A2选择题

在 Dev-C++ 中,"编译并运行"的快捷键是()

A. F5   B. F9   C. F10   D. F11

查看参考答案

答案:D. F11

Dev-C++ 中 F9 = 仅编译,F10 = 仅运行,F11 = 编译并运行。注意 Code::Blocks 中 F9 才是 Build and Run。

考点:Dev-C++ 的编译运行快捷键是 F11,注意与 Code::Blocks 的 F9 区分。

A3选择题

g++ 命令中 -O2 选项的作用是()

A. 指定输出文件名
B. 开启二级编译优化
C. 使用 C++20 标准
D. 显示所有警告

查看参考答案

答案:B

-O2 开启二级优化(O 是大写字母 O,代表 Optimize)。-o(小写)才是指定输出文件名,-Wall 显示警告,-std=c++20 指定标准。

考点:g++ 选项区分大小写,-O(Optimize)表示编译优化等级,而 -o 小写用于指定输出文件名。

易错:把 -O2 当成 -o 的输出参数,误答“指定输出的可执行文件名”;或以为 -O2 表示编译两个文件。

A4选择题

NOI 竞赛赛场使用的操作系统和 IDE 分别是()

A. Windows + Dev-C++
B. NOI Linux + Code::Blocks
C. macOS + Xcode
D. Windows + Visual Studio

查看参考答案

答案:B

NOI 竞赛使用 NOI Linux(基于 Ubuntu),预装 Code::Blocks 和 g++ 编译器。

考点:NOI 官方赛场环境为 NOI Linux(基于 Ubuntu),预装 Code::Blocks 与 g++ 编译器。

易错:按平时机房习惯误选“Windows + Dev-C++”;或只答出 Linux 却漏掉题目要求的 IDE 名称。

🟡 B组 · 提高(4题)

B1选择题

以下 Linux 命令中,用于创建新目录的是()

A. touch dir   B. mkdir dir   C. cd dir   D. ls dir

查看参考答案

答案:B. mkdir dir

mkdir = make directory(创建目录)。touch 创建空文件,cd 切换目录,ls 列出文件。

考点:Linux 目录与文件管理命令:mkdir 建目录、touch 建空文件、cd 切换目录、ls 列出内容。

易错:把 mkdir 与 touch 记反(touch 只能创建空文件,建不了目录);或误选 cp。

B2命令题

写出在 Linux 终端中完成以下操作的命令序列:

① 创建目录 contest
② 进入该目录
③ 编译 main.cpp 为 main(使用 O2 优化和 C++17)
④ 运行程序,从 input.txt 读入,输出到 output.txt

查看参考答案
mkdir contest
cd contest
g++ -O2 -std=c++17 main.cpp -o main
./main < input.txt > output.txt

思路:按“建目录 → 进入目录 → 编译出可执行文件 → 运行并重定向输入输出”的顺序写命令,最后一步用 < 读入数据、> 写出结果。

易错:把重定向方向写反,用 > input.txt 会直接覆盖输入文件;或编译时用了 -o main 却仍去运行 ./a.out。

B3错误排查

编译以下代码时报错 error: expected ';' before 'return',请指出错误位置和原因:

#include <iostream>
using namespace std;
int main() {
    int a = 5, b = 3;
    cout << a + b << endl
    return 0;
}
查看参考答案

错误位置:第5行

cout << a + b << endl 末尾缺少分号 ;

编译器报"第6行错误"(expected ';' before 'return'),但真正的问题在第5行。

修正:cout << a + b << endl;

思路:编译器报错行往往“滞后一行”,应从报错行的上一行开始往上找,检查上一条语句是否漏了分号。

易错:盯着报错的 return 行去改,结果越改越乱;真正要改的是上一行 cout 语句末尾补上分号。

B4简答题

请解释 g++ -O2 -std=c++17 -Wall main.cpp -o main 中每个参数的含义。

查看参考答案
参数含义
g++调用 GNU C++ 编译器
-O2开启二级编译优化,提升程序运行速度
-std=c++17使用 C++17 语言标准
-Wall开启所有编译警告,帮助发现潜在问题
main.cpp输入的源文件名
-o main指定输出的可执行文件名为 main

思路:把整条命令按段拆开读:编译器名 → 优化选项 → 语言标准 → 警告开关 → 源文件名 → 输出文件名。

易错:大小写不分,把 -O2 与 -o main 混为一谈;或漏答 -Wall 的作用,只答“编译”两字。

🔴 C组 · 挑战(4题)

C1初赛真题

以下不属于 IDE(集成开发环境)的是()

A. Dev-C++   B. Visual Studio   C. Eclipse   D. gcc

查看参考答案

答案:D. gcc

gcc(GNU Compiler Collection)是编译器,不是 IDE。IDE 集成了编辑器、编译器、调试器等多种工具。Dev-C++、Visual Studio、Eclipse 都是 IDE。

考点:gcc/g++ 是 GNU 编译器集合,只做编译;IDE 则是集编辑、编译、调试于一体的环境。

易错:因为 Dev-C++ 里用的就是 g++,便误以为 g++ 是 IDE;或把 Eclipse 当成普通编辑器而漏选。

C2初赛真题

在 Linux 系统中,用于删除一个非空目录 myproject 及其所有内容的命令是()

A. rmdir myproject
B. rm myproject
C. rm -r myproject
D. del myproject

查看参考答案

答案:C. rm -r myproject

-r(recursive)表示递归删除,可以删除非空目录及其所有内容。rmdir 只能删除空目录,rm(无 -r)只能删除文件,del 是 Windows 命令。

考点:rm 删除文件,rm -r 递归删除目录及其内容,rmdir 只能删除空目录。

易错:选 rm myproject(不加 -r),非空目录删不掉;或选 rmdir,误以为它能删非空目录。

C3综合分析

某同学在 NOI Linux 环境下编译运行程序,遇到了以下问题。请逐一分析原因并给出解决方案:

问题①:执行 ./a.out 提示 "Permission denied"
问题②:程序运行后输出窗口一闪而过
问题③:编译时显示 "warning: unused variable 'x'"

查看参考答案

问题①:Permission denied

原因:可执行文件没有执行权限。

解决:chmod +x a.out 或重新编译用 -o 指定名称。

问题②:输出窗口一闪而过

原因:程序运行完毕立即关闭终端窗口。

解决:在 return 0 前加 system("pause"); 或在终端中运行(不会闪退)。竞赛中通常在终端运行,不会有此问题。

问题③:unused variable 警告

原因:声明了变量 x 但未使用。这不会导致编译失败,但可能是逻辑错误。

解决:检查是否忘记使用 x,或者删除不需要的变量声明。

思路:按报错关键词归类原因:Permission denied 属权限问题,窗口闪退属运行环境问题,unused variable 属代码逻辑问题,再分别给出对应的解决办法。

易错:把 Permission denied 当成编译错误去改代码;或把 unused variable 当成致命错误,忘了它只是警告,不影响生成可执行文件。

C4实战操作

请在你的电脑上完成以下完整操作,并截图提交:

① 使用 Dev-C++ 或 Code::Blocks 新建一个 C++ 源文件
② 编写程序:读入两个整数,输出它们的和、差、积
③ 保存为 calc.cpp
④ 编译运行,验证结果正确
⑤ (加分)用 g++ 命令行编译,并用文件重定向测试

查看参考答案代码
#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    cout << a << " + " << b << " = " << a + b << endl;
    cout << a << " - " << b << " = " << a - b << endl;
    cout << a << " × " << b << " = " << a * b << endl;
    return 0;
}
运行结果
输入: 12 5
输出: 12 + 5 = 17
      12 - 5 = 7
      12 × 5 = 60

g++ 命令行编译:

g++ -O2 -std=c++17 -Wall calc.cpp -o calc
echo "12 5" | ./calc

思路:按“新建 .cpp 文件并敲入完整代码 → 用 g++ 编译 → 运行程序输入两个整数 → 核对输出结果”的流程操作,最后按要求截图提交。

易错:忘记写输入语句就直接运行,导致结果与预期不符;或漏写 using namespace std 使 cout 报错;也可能把文件存成 .txt 而非 .cpp。