小熊猫C++入门教程

由用户anbangli撰写的入门教程

作者:anbangli@foxmail.com

格式调整:Alan-CRL@qq NaN@qq 瞿华(royqh1979@gmail.com)

1、安装与启动

**小熊猫C++**是一个开源、免费的 C/C++ 集成开发环境(Integrated Developing Environment,简称IDE),源于著名的Dev-C++。其前身小熊猫Dev-C++ 5.x和6.x是在Orwell Dev-C++停止更新后自行维护升级的分支版本。后来改用QT(一种适合于跨平台界面开发的C++开发框架)重新开发,曾用名小熊猫Dev-C++ 7,现更名为小熊猫C++。

建议读者从小熊猫C++中文官方主页下载最新版本。

点击主页中的“下载”,其中有几个下载链接(如下图),读者可以自行选择点击其中一个。

例如点击“蓝奏云网盘”并输入分享码之后,出现如下图网页,其中列出了多个操作系统的不同安装包。如果你不懂这些安装包的区别,那么就选择点击其中含有“Win64”和“安装版”字样的那一个(如下图所示)。点击之后就会开始下载。

下载到本机之后请开始安装。安装过程很简单,按照对话框的操作提示执行即可,在此略过不叙。

安装完毕之后,双击Windows桌面上的“小熊猫C++”图标,以启动这个软件。

第一次运行时会进行编译器配置,出现如下对话框:

请点击“Yes”按钮。

稍等片刻之后,自动配置完毕,出现软件主界面(下图),其中包括菜单栏、主工具栏、左侧工具面板、文件编辑区和底部工具面板。

小熊猫C++默认的界面主题是深色的,有些用户喜欢而另一些用户不喜欢。可以点击菜单“工具”下的“选项”,在弹出的对话框中点击“主题”下拉框,选择“default”并点击确定,于是整个界面都变成浅色了。为了方便起见,下文中的图片都是在浅色界面下截屏而得的。

工具栏是平时使用最多的,其中各个按钮会随着当前操作而处于 明亮可用状态 或 变灰不可用状态。几个主要按钮的功能如下图所示(请注意红色粗体标记的按钮):

2、编辑功能

  • 点击工具栏上的“新建源代码”按钮(或者按快捷键 Ctrl+N),就可以新建一个空白的源代码文件,并开始编写程序了。

  • 点击工具栏上的“打开”按钮(或按快捷键 Ctrl+O),就可以打开一个原有的源代码文件或工程文件,进行编辑。

  • 点击工具栏上的“保存”按钮(快捷键 Ctrl+S)或“全部保存”按钮,即可保存当前编辑的文件,默认文件扩展名为“.cpp”。

  • 点击文件选项卡上的“关闭”按钮,即可关闭当前编辑的文件。

在小熊猫C++中编辑文件时,基本操作与其它文本编辑器是完全相同的。值得指出的是,小熊猫C++具有强大的代码提示功能,当用户键入字符时,会自动根据前面已输入的几个字符而提示相似的词条。例如,当用户键入“#in”时,就会自动弹出“#include”、“#ifndef”等标识符(如下图所示)。如果按下回车键,则自动输入当前高亮的词条。

不仅如此,在编辑过程中,小熊猫C++会对已输入的源代码进行自动解析并提示(如下图所示):

(1)编辑区左边的行号区中显示了代码中的块状结构,可供用户看出代码中的复合语句层次(如图中的粉色框标记所示)。

(2)每次当用户按下回车键时,它会自动对当前行进行语法检查。如果有语法错误,就会在行号区标记出来(图中红色框所示,行号区的灰色圆圈表示警告信息),当鼠标悬浮于该行时就会显示语法检查信息(图中编辑区红色框所示)。

(3)当程序中定义了函数或类型时,它们会被自动解析出来,并显示在左侧工具窗口的“结构”页中显示出来(图中显示该程序中有新类型gg、函数“fun(int a)”和函数“main()”)。

还要说到的是,小熊猫C++集成了一个名为“AStyle”的自动格式整理工具,可以帮助用户整理源程序的排版格式。请点击工具栏上的“对代码重新排版”按钮,就会把当前正在编辑的源代码进行格式整理,使它变成规范的排版格式。——请读者记住并熟练使用这一工具。

3、编译与运行

当程序编写完成并已经保存时,就可以进行编译了。

小熊猫C++提供了多种编译配置方案可供用户选用。不过大部分用户直接使用默认的编译配置方案即可,不需额外设置。

程序编写完成之后,点击工具栏上的“编译”按钮,就可以开始编译,稍等片刻就会完成编译。这时底部信息面板会自动向上展开。如果编译出错,则底部信息面板会显示“编译信息”页,其中列出了编译时中的出错信息(如下图所示)。

我们在编写程序时经常会出错(包括语法错误和逻辑错误),程序编译时通常能检测出各种语法错误(上面图片中的示例程序就有语法错误和逻辑错误),这时我们需要根据出错信息,找出我们在编写程序时所犯的错误,并对程序进行修改,以改正这些错误。

根据上图中的编译信息“[错误] ‘k’ was not declared in this scope([错误] ‘k’ 未在此范围内声明)”,我们需要修改程序,在其中定义变量 k。

排除了所有语法错误之后,就可以编译成功。不会弹出编译信息。若有需要,可以点击底部信息面板的“编译日志”,从中看到详细的编译信息。

上图中的编译日志中显示,程序已经编译成功,生成了可执行文件“C:\Tools\test1.exe”。

编译完成之后,点击工具栏上的“运行”按钮,以便运行程序。如果程序未编译,或者编译之后有修改,小熊猫C++会自动重新编译程序。运行时会自动弹出控制台窗口,在其中显示有程序输出结果。

请注意,图中的输出结果是 4950 。根据我们的数学知识可知,从 1 累加到 100的结果应该是5050,所以这个答案是错误的,这说明上面的程序虽然可以运行并输出结果,但是其中存在着逻辑错误,需要进行调试,以排除错误。

在控制台窗口中按回车键,关闭该窗口。

4、小熊猫C++ 中的程序调试方法

编译时可以检查出源代码中的语法错误,但是检查不出源代码中的逻辑错误。有时候程序虽然能够编译并运行,但是运行结果却不是预想的结果,那就是因为源代码中存在有逻辑错误。

要想清除程序中的逻辑错误,就必须学会一些调试方法,通过观察变量的数值变化,加上自己的逻辑思考,从而找出程序中的错误所在并修改清除之。

一种常见的办法是在程序中添加输出语句,输出运行过程中的变量的中间值。例如上面示例程序中,可以在循环中添加语句,输出变量k 和 sum 在循环过程中的值(如下图所示)。

再次编译并运行程序,输出了一系列数据,如下图所示:

仔细查看输出的数据(需要用鼠标拖动窗口右侧的滚动条,以便看到完整的输出结果),可以发现,上面程序只是从1 累加到 99,所以累加结果是4950 。

要解决这个程序中的错误,就需要把 for 循环中的“k < 100”改为 “k <= 100”。重新编译并运行,就会发现,程序最终输出结果是 5050,这是从 1 累加到 100的正确结果。

上面程序通过输出运行过程中的变量的中间值可以找出问题并排除错误,但是有些程序的错误可能比较隐藏比较深,这时就需要更复杂一点的方法,也就是使用集成开发环境所提供的调试工具

小熊猫C++提供了强大的除错和调试工具。工具栏上与调试有关的按钮是“开始调试”、“单步跳过”、“单步进入”、“单步跳出”、“继续执行”、“停止执行”和“添加监视”(下图所示)。在调试过程中需要熟练使用这几个按钮。

1.开始调试(Debug)

我们以如下一个含有错误的程序为示例,讨论如何进行调试。

#include <stdio.h>

double average(int length, int array[]) {
	int k, sum;
	for (k = 0; k <= length + 1; k++)
		sum += array[k];
	return sum / k;
}

int main() {
	int a[] = {87, 74, 68, 86, 78, 82, 90};
	int len = sizeof(a) / sizeof(a[0]);
	printf("Total: %d\\n", 87 + 74 + 68 + 86 + 78 + 82 + 90);
	double avrg = average(len, a);
	printf("Length: %d, Average: %f\\n", len, avrg);
	return 0;
}

该程序中含有一个名为“average”的函数,用于求出长度为 length 的整型数组 array[]的平均值。在主函数中提供了一个示例数组 a ,并调用 average 函数求平均值。

把这个程序保存到本机,编译并运行。手工简单计算可知,数组 a中现有的数据的平均值大约是 80.7,但是程序输出结果不正确,说明程序中存在严重的错误,而且无法直接找出错误所在。

点击工具栏上的“!开始调试”按钮(快捷键F5),或点击菜单“运行”下的“调试 F5”即可开始调试。

2. 调试过程中的操作

如下图所示,启动调试之后,工具栏上的“单步跳过”、“单步进入”、“单步跳出”、“继续执行”和“停止执行”都变亮可用了,左侧管理器面板会自动切换到“监视”窗格。底部信息面板也自动展开并显示到“调试”页。

在上图中我们可以看到,启动调试后,“调试”面板的右边部分显示了“局部变量”标签页,其中显示局部数组变量a 、局部变量 len 和局部变量 avrg的值,而且是一些奇怪的莫名其妙的数字。这是因为刚进入函数时,所有局部变量都只是被分配了存储空间,还没有被赋值。所以查询其值就得到一个毫无意义的数字。需要在程序中赋值之后,它们才具有我们所需的值。读者不要为此感到惊奇。

然后需要熟练使用工具栏上的“单步跳过”按钮(快捷键F7)和“单步进入”按钮(快捷键 F8)。在简单的只含有一个 main函数的程序中,这两个按钮的功能是相同的,没有区别。而在含有多个自定义函数的程序中,这两个功能有较大的区别:“单步跳过”是指把当前语句作为一步执行完毕,而“单步进入”是指如果当前语句中含有函数调用则追踪进入到函数中去执行

如果调用函数是标准函数或你认为无误的函数,就用“单步跳过”执行(以免追踪进入到函数中),对于怀疑有问题的函数才用“单步进入”去追踪。如果一不小心进入了标准函数(例如printf 函数或“cout << endl;”输出),则点击“单步跳出”以返回。

在启动了调试之后,读者可以使用“单步跳过”按钮和“单步进入”按钮,慢慢地在调试状态下执行程序中的语句,并随时观察下方“局部变量”标签页中所显示的值,并且不断地思考程序中的语句是否正确,然后进行相应操作。

对于上面程序,应该在第15句时使用“单步进入”,追踪到 average函数中去。仔细观察可以发现,该函数中的局部变量 sum 没有赋初值!

这时请点击工具栏上的“停止”按钮(快捷键 F6 ),返回到编辑状态,把局部变量 sum赋初值为 0(例如写成“int k, sum = 0;”,然后点击“编译”按钮重新进行编译,再点击“运行”按钮运行程序,或点击“调试”按钮启动调试。(以后在调试过程中可以随时点击“停止”按钮返回编辑状态,对源代码进行修改之后需要重新编译,再运行程序或启动调试)

运行程序会发现结果仍然不正确,所以需要重新启动调试。分析可知,这时需要检查 for循环中的情况。检查时会逐渐注意到,虽然下方“局部变量”标签页中随时会显示 k 和 sum的值,但是重要的是需要观察 array[k]才行!然而底部的“局部变量”标签页中并没有显示这个数组元素的值。

这时需要使用“监视变量”的功能。

在默认情况下,如果用鼠标悬浮在当前运行的代码中的变量上方(例如上面程序中的 length ),则会自动出现一个小悬浮窗口,显示出该变量当前的值。

如果想更快速地看到变量的值,可以在编辑器中选中待查看的变量名(例如,选中“array[k]”),点击工具栏上的“添加监视”按钮并确认,左边的“监视”窗格中就会显示该变量当前的值。

在上面程序中添加了查看变量 array[k]之后,用“单步进入”逐句执行该程序,并随时观察变量 k 和数组元素 array[k]的值,最后会观察到,当 k 的值为 8 和 9时仍然进入了循环!这是一个数组下标越界错误(主函数中的数组 a 只有 8个变量,下标为 0 - 7。数组长度值 len 传递给函数 average 的参数 length,循环变量 k 最大只能取值为 7)。应该把 “k <= length + 1”修改为 “k <length”,这样才能避免下标越界,求得正确的 sum 值。

在上面的调试过程中,每次都使用“单步跳过”按钮(F7)和“单步进入”按钮(F8)进行操作时比较慢。还可以在程序中设置断点,加快调试操作速度。

在事先对程序的运行出错现象进行思考之后,可以推断出程序出错的可能原因在于源代码中的哪些语句。无论是在编辑状态还是在调试过程中,可以用鼠标点击想要暂停执行的那一行左边的装订区位置中的行号(或者把光标移动到想要那一行并按F4键),该行在装订区的行号处就显示有一个带勾的红圈,表示该行已被设置为一个断点。再次操作则取消该行为断点。

可以直接在“sum +=array[k];”那一行设置一个断点,也可以在自己怀疑有问题的程序片段前后设置多个断点,以便进行调试。

在程序中设置了断点之后,启动调试时会直接运行到第一个断点处(而不是第一条可执行语句)暂停。这时仍然可以用“单步跳过”按钮(F7)和“单步进入”按钮(F8)进行操作。如果认为程序中某一部分无误,则点击“继续执行”按钮,就会继续运行到下一个断点处暂停,无断点则运行到程序末尾结束。

对上面的示例程序继续调试,可以发现语句“return sum / k;”含有错误:整数相除得到整数,丢失了小数部分。一种修改办法是改成“return 1.0 *sum / k;”。

这样,通过启动 小熊猫C++中的调试功能,使用“单步跳过”(F7)和“单步进入”(F8)慢慢地执行程序,在此过程中随时查看变量的值,并在头脑中进行分析思考,从而判断程序中是否存在逻辑错误,从而修改程序、排除程序中的错误。

最后,总结一下小熊猫C++ 使用过程中调试过程中经常用到的功能及其快捷键:

  • 切换断点 F4
  • 启动调试 F5
  • 停止执行 F6
  • 单步跳过 F7
  • 单步进入 F8
  • 编译 F9
  • 运行 F10
  • 编译运行 F11

熟记这些快捷键有利于加快操作速度。

当前小熊猫C++中文作者主页:https://royqh1979.gitee.io/redpandacpp/

旧版本(使用Delphi编写,与原版Dev-C++相似):https://royqh.net/devcpp/

软件作者的知乎专栏“小熊猫C++”:https://www.zhihu.com/column/c_1440014168041054208

最后修改 October 1, 2023: update (e7d6a8f5)