Dev C++ 使用指南


作为一款免费、开源的 C/C++ IDE,Dev C++ 内嵌 GCC 编译器和 GDB 调试器,既能编译、运行程序,也能调试程序。本次 C 程序设计基础我们建议初学者采用 Dev C++ 5.11 版本(点击即可跳转到下载页面)

Dev C++安装

点击 Download 进行下载安装。(建议在 D 盘新建一个文件夹作为安装目录,并将文件夹名改为"Devcpp",方便文件查找)。

下载完成后在文件夹中打开 Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.exe 文件,语言选择 English(这个无所谓,后面可以选择界面语言),之后 I agree -> Next -> 选择刚才新建的文件夹作为安装目录 -> Install 等待安装完成。

首次安装时会让你进行一些配置,如图:

image-20220912151248213

这里的 Language 就是最后的界面语言,选择简体中文。之后一路点 Next Ok 即可。

关于界面

5.11 版本的菜单栏长这样

image-20221127134409186

点击菜单栏中的工具 -> 编辑器选项,则可以对界面进行自定义,具体自行探索。

同时,5.11 版本 的 Dev C++ 菜单栏有一个 AStyle 的按钮,可以将你的代码进行格式化。AStyle -> 格式化选项 则可以进一步自定义代码风格。如果你看过我的另一篇文章,则应该对代码风格的重要性有一个清楚的认识。

第一个源程序

我们在之前新建的文件夹(D:/Devcpp/)下新建一个文件夹 src,用来存放我们之后的 C 源代码文件。

打开 Dev C++,点击菜单栏中的文件 -> 新建 -> 源代码,界面中自动出现一个未命名1的文件,文件 -> 另存为,将文件保存在文件夹 D:/Devcpp/src/ 下,并命名为 demo.c。(保存类型选 C source files

输入以下代码

#include <stdio.h>

int main() {

    printf("Hello World!\n");	// 在屏幕上打印 "Hello World!"

    return 0;

}

点击菜单栏中的编译并运行,或者按下键盘上的 F11 键,此时跳出一个黑框,说明程序运行成功。

image-20220912213816204

具体 C 语言的语法会在课堂上讲

从 C 语言到可执行程序

如果你细心,你会发现下方有这样这样一条信息👇

image-20221127141649879

我们来分析一下这信息都是些啥玩意。

编译单个文件

先说说什么是编译吧。C 语言其实是一种比较高级的语言,为什么说它高级呢,是因为这是写给看的,各种关键字 for, if 其实都是根据人类语言来设计的。

想象一下在某个平行世界里,英文中如果的单词不是 if 而是其它的什么乱七八糟的文字组合,那么在那个世界里 C 语言的条件判断关键字就不是 if 了,而会变成其它形状。

但计算机并不能识别高级语言,更何况在那个 NLP 技术并未兴起的年代。事实上,计算机只能识别二进制文件,称为机器语言,把不同指令编码为二进制文本,然后发给机器,从而进行工作。为此,程序员不得不敲只含 0, 1 的二进制代码,这给当时的工作带来了极大困扰——可读性真的很差。为了让人类看懂代码,计算机科学家们设计出了一系列高级语言(我瞎猜的)。但问题也随之产生:怎样让机器看得懂这些高级编程语言呢?

所谓编译 Compile,简单来说就是根据一定规则,将 C 语言这种高级语言"翻译"成机器能看懂的机器语言,这样机器就能工作了。

当然真正的过程还包括预处理、汇编、链接,感兴趣的请自行了解。

那么这一段就很好理解了。

处理 C 源文件

再来看第二段。C 编译器就是那些专门将 C 语言"翻译"成机器语言的程序,这里 DevC++ 采用的编译器名字叫 gcc

第二行命令,其实我们只需要知道前面那部分即可👇

gcc.exe "D:\Devcpp\src\demo.c" -o "D:\Devcpp\src\demo.exe"

gcc.exe 指明了编译程序,也可以用其它的;第一个双引号内容是我们要进行编译的源文件;-o 路径名 是指我们希望在指定路径下生成可执行文件 demo.exe

如果你经常接触电脑,你会发现很多软件的名字都带有 .exe 后缀,这是英文单词 execution 的缩写,实际效果就是你双击那个图标就能打开软件了。可执行文件实际上就是之前所说的二进制机器语言文件,这是机器能看懂的,所以你双击它的时候就能被正确的运行。

编译结果

输出文件名恰好就是上面那个生成的可执行文件的名字。

另一种编译运行的方法

进入文件夹 D:,删除 demo.exe 文件,然后在上方输入 cmd 然后回车,如下👇

image-20221127144407793

我们就直接进入命令行,并且处于当前目录。然后把上面那串命令 gcc.exe "D:\Devcpp\src\demo.c" -o "D:\Devcpp\src\demo.exe" 复制粘贴过来,按回车后稍等片刻,我们就能在文件夹里看到 demo.exe 文件了。

也可以把那串命令简化为 gcc demo.c -o demo.exe,效果是一样的。

总结:此方法的格式为 gcc 文件名.c -o 希望得到的可执行文件名.exe。可执行文件名不一定要和源文件名一样,但尽量保持一致。

image-20221127144550115

双击它,会发现啥也没发生,又好像有啥东西一闪而过,这是正常的。把上面代码改为

#include <stdio.h>

int main() {

    printf("Hello World!\n");	// 在屏幕上打印 "Hello World!"

    system("pause");

    return 0;

}

重新来一遍,中途黑框里会出现一个 warning,不用管。再双击 demo.exe,得到下面这个结果,成功了。

image-20221127144758462

Dev C++调试程序方法

所谓调试程序,就是控制编译器一行一行地执行代码,过程中可以清楚看到每个变量值的变化情况、函数的调用过程等,进而发现程序中隐藏的错误或者低效的代码。

本文中,我们以一段完整的 C 语言程序为例,系统地学一下如何用 Dev C++ 调试程序。

#include <stdio.h>

int add(int a, int b) {

    int c = a + b;

    return c;

}

int main() {

    int a = 10, b = 20;

    int sum = add(a, b);

    printf("sum = %d", sum);

    return 0;

}

1、Dev C++调试程序

默认情况下,程序会瞬间从开头执行到结尾,除非中途出现错误(称为"运行时错误",比如读写内存失败、数组越界等)。要想让程序暂停执行,就需要设置一个断点。

所谓断点(BreakPoint),可以简单地理解成障碍物,汽车遇到障碍物不能通行,程序遇到断点就会暂停执行。

Dev C++ 给程序设置断点的方法很简单,想在哪一行代码处暂停执行,直接单击代码所在行的行号即可。例如:

image-20220912141612109

图 1 Dev C++添加断点

如上图所示,我们成功地在第 13 行代码处添加了一个断点。注意,以正常方式点击"编译并运行"按钮(快捷键是 "Fn+F11")运行程序,断点是不会生效的,只有点击"调试"按钮(快捷键是"Fn+F5")运行程序时才有效。

点击"调试"按钮,或者按下快捷键"Fn+F5",程序开始执行,直到第 13 行代码处(当前行代码尚未运行)暂停,如下图所示:

image-20220912145126238

图 2 进行调试

2、断点发挥的作用

当程序暂时执行时,借助调试窗口中的按钮可以查看某些变量的值,还可以控制编译器继续往下执行程序。整个调试窗口中,常用的按钮以及含义分别是:

  • 添加查看:查看某个变量的值,还可以看到值的变化情况;
  • 下一步:控制编译器向下执行一行语句;
  • 单步进入:功能和"下一步"按钮类似,不同之处在于,当程序中调用某个自定义的函数时,此按钮可以进入到函数内部,继续调试函数内部的代码,而 "下一步" 按钮不会;
  • 跳过:继续执行程序,遇到下一个断点暂停执行;
  • 停止执行:停止调试程序。

举个例子,在"调试"框中单击右键,点击"添加查看"按钮监视变量 sum 值的变化情况,添加之后如下图所示:

image-20220912145320723

图 3 添加要监控的变量

初始状态下,变量 sum 的值为 0。点击"下一步",执行第 13 行代码,箭头光标指向第 15 行,变量 sum 的值仍为 0。再点击"下一步",执行第 15 行代码,箭头光标指向第 17 行,变量 sum 的值变为 30。

当箭头光标指向第 15 行代码时,点击"单步进入"按钮,箭头光标会进入 add() 函数并指向第 5 行代码,感兴趣的同学可自行尝试。

调试过程中,Dev C++ 支持同时监控多个变量,还支持在程序中设置多个断点,如下图所示:

image-20220912145731171

图 4 监控多个变量与添加多个断点

如果点击调试时出现下图报错

image-20220912151606838

并在点击 Yes 后闪退,则重新打开 Dev C++,点击 菜单栏中的工具 -> 编译选项,在"代码生成/优化"中点击"连接器",将"产生调试信息"改为 Yes 即可。

image-20220912151814628


 上一篇
MIT6.824 学习总结 MIT6.824 学习总结
磨蹭 3 个月,神课分布式系统 MIT 6.824 终于完结了。学习这门课的起因是被同年 6 月份 pingCAP 训练营橄榄了,虽然同为 raft 算法,但工业级的实现显然要比教学级难更多。我对分布式的理解还是太浅,于是决心从基础打起,好
2022-11-28
下一篇 
COPS 论文阅读 COPS 论文阅读
6.824 的第十三篇论文是 COPS——一种可提供具有收敛冲突处理的因果一致性(Causal Plus, Causal+)的 ALPS 键值存储系统,并且具有高可扩展性。在 COPS-GT 中引入的 GET 事务还能够在不锁定或阻塞的情况
2022-11-23
  目录