大家好,我是良许,一个深耕嵌入式 12 年的老工程师,前世界 500 强高工。
我花了 3 个月时间,写了一个 C 语言电子书,以非常通俗的语言跟大家讲解 C 语言,把复杂的技术讲得连小学生都能听得懂,绝不是 AI 生成那种晦涩难懂的电子垃圾。
C 语言电子书目录如下:
在我们开始学习C语言之前,就像木工需要准备锯子、刨子、凿子等工具一样,我们程序员也需要准备好自己的"工具箱"。这个工具箱就是我们今天要学习的开发环境。
想象一下,如果你要写一篇文章,你需要纸和笔,或者电脑和文字处理软件。同样地,要编写C语言程序,我们也需要专门的工具。这些工具包括:编辑器(用来写代码)、编译器(用来把代码翻译成计算机能理解的语言)、调试器(用来找出程序中的错误)等等。
把这些工具整合在一起,就形成了一个完整的开发环境。
1.3.1 编译器的选择与安装
1. 什么是编译器?
在正式介绍Dev C++之前,我们先来理解一下什么是编译器。编译器就像一个翻译官,它的工作是把我们用C语言写的程序翻译成计算机能够理解和执行的机器语言。
我们用C语言写的代码就像用中文写的说明书,而计算机只能理解由0和1组成的机器语言,就像外国人只能理解英文一样。编译器就是这个中英文翻译官,它把我们的C语言代码翻译成机器语言,这样计算机就能理解并执行我们的程序了。
2. 为什么选择Dev C++?
在众多的C语言开发工具中,我们为什么选择Dev C++呢?这就像选择学习工具一样,我们要选择最适合初学者的。
- 简单易用:Dev C++的界面非常简洁,功能布局清晰,就像一个整理得井井有条的工具箱,每个工具都放在显眼的位置,初学者很容易找到需要的功能。不像一些专业的开发工具那样功能复杂,按钮和菜单多得让人眼花缭乱。
- 免费开源:Dev C++是完全免费的软件,我们不需要花钱购买,也不需要担心版权问题。这就像图书馆里的书籍,任何人都可以免费使用。
- 中文支持:Dev C++支持中文界面,这对我们中文用户来说非常友好。菜单、提示信息都是中文的,不会因为语言问题影响我们的学习。
- 功能完整:虽然Dev C++看起来简单,但它包含了C语言开发所需的所有基本功能:代码编辑、语法高亮、自动补全、编译、运行、调试等等。就像一把瑞士军刀,小巧但功能齐全。
- 适合教学:Dev C++没有太多复杂的功能来分散注意力,让我们能够专注于学习C语言本身,而不是花大量时间去学习如何使用开发工具。
1.3.2 集成开发环境介绍
1. 什么是集成开发环境(IDE)?
集成开发环境,英文叫Integrated Development Environment,简称IDE。听起来很高大上,其实说白了就是把程序员需要的各种工具整合在一起的软件。
这就像一个多功能工具箱,里面有螺丝刀、扳手、锤子、钳子等各种工具。如果没有这个工具箱,我们修理东西时就要四处找工具,非常麻烦。IDE就是程序员的工具箱,把编辑器、编译器、调试器等工具都集成在一个软件里,让我们能够在一个界面中完成编程的所有工作。
在没有IDE的时代,程序员需要用一个软件写代码,用另一个软件编译代码,再用第三个软件调试程序。这就像做饭时需要在不同的房间找锅、找铲子、找调料一样麻烦。IDE的出现让编程变得简单多了,所有工具都在同一个界面中,随时可以使用。
2. Dev C++界面详细介绍
当我们第一次打开Dev C++时,看到的界面可能会让一些同学感到困惑。别担心,我们来详细了解一下这个界面的各个部分,就像熟悉一个新教室的布局一样。
菜单栏:位于窗口的最上方,包含了"文件"、"编辑"、"搜索"、"查看"、"项目"、"运行"、"调试"、"工具"、"窗口"、"帮助"等菜单。这就像教室里的各种设施标识,告诉我们每个功能在哪里。
- "文件"菜单:用于新建、打开、保存文件,就像文件柜一样管理我们的程序文件。
- "编辑"菜单:提供复制、粘贴、查找、替换等编辑功能,就像Word里的编辑功能。
- "运行"菜单:包含编译和运行程序的命令,这是我们最常用的功能之一。
工具栏:位于菜单栏下方,是一排图标按钮。这些按钮是最常用功能的快捷方式,就像遥控器上的快捷键,让我们能够快速执行常用操作。比如新建文件的图标看起来像一张白纸,保存文件的图标是一个软盘,编译运行的图标是一个绿色的三角形。
编辑区:这是窗口中央最大的区域,我们的代码就是在这里编写的。这就像作文本,我们在这里写我们的C语言程序。编辑区有很多贴心的功能:
- 行号显示:每一行代码前面都有行号,这样当程序出错时,我们能快速找到出错的位置。
- 语法高亮:不同类型的代码会显示成不同的颜色。比如关键字是蓝色的,字符串是红色的,注释是绿色的。这就像用不同颜色的笔做笔记一样,让代码更容易阅读。
- 自动缩进:当我们写代码时,编辑器会自动调整缩进,让代码看起来更整齐。
项目管理器:通常在左侧,显示当前项目的文件结构。对于简单的程序,我们可能只有一个文件,但当程序变得复杂时,可能会有很多文件,项目管理器帮助我们组织和管理这些文件。
消息窗口:位于下方,显示编译信息、错误信息、调试信息等。这就像老师批改作业时的批注,告诉我们程序哪里写得对,哪里有问题。
3. IDE的主要功能
代码编辑功能
IDE最基本的功能就是让我们编写代码。现代的IDE都提供了很多辅助编写代码的功能:
语法高亮:不同的代码元素会显示成不同的颜色。这不仅仅是为了好看,更重要的是帮助我们快速识别代码的结构。比如,当我们看到红色的文字时,立刻知道这是一个字符串;看到蓝色的文字时,知道这是C语言的关键字。
自动补全:当我们输入代码时,IDE会根据上下文提示可能的选择。就像手机输入法会提示可能的词汇一样,这个功能可以大大提高编码效率,减少打字错误。
括号匹配:当我们的光标停在一个括号上时,IDE会高亮显示与之匹配的另一个括号。这在代码复杂时非常有用,帮助我们确保括号配对正确。
代码折叠:对于较长的函数或代码块,我们可以将其"折叠"起来,只显示函数名,这样可以让代码看起来更简洁,便于浏览整体结构。
编译功能
编译器是IDE的核心组件之一。在Dev C++中,编译功能被很好地集成了:
一键编译:我们只需要按F9键或点击工具栏上的编译按钮,IDE就会自动编译我们的程序。编译过程中的所有信息都会显示在消息窗口中。
错误提示:如果程序有语法错误,编译器会在消息窗口中显示详细的错误信息,包括错误的位置和可能的原因。我们可以双击错误信息,编辑器会自动跳转到出错的代码行。
警告信息:除了错误,编译器还会提示一些可能存在问题的代码,这些叫做警告。虽然有警告的程序仍然可以运行,但我们应该尽量消除这些警告。
运行和调试功能
程序运行:编译成功后,我们可以直接在IDE中运行程序,看到程序的执行结果。
调试功能:当程序运行结果不符合预期时,我们需要调试来找出问题。IDE提供了强大的调试功能:
- **断点设置**:我们可以在任意代码行设置断点,程序运行到断点时会暂停,让我们检查变量的值。
- **单步执行**:我们可以让程序一行一行地执行,观察每一步的执行结果。
- **变量监视**:在调试过程中,我们可以实时查看变量的值,了解程序的执行状态。
4. 如何正确显示中文?
-fexec-charset=GBK -finput-charset=UTF-8
1.3.3 第一个C程序
1. 程序员的传统:Hello World
在程序员的世界里,有一个几十年来的传统:学习任何一门新的编程语言时,第一个程序都是在屏幕上显示"Hello World"。这个传统始于1972年,当时贝尔实验室的布莱恩·科尼汉在介绍C语言时使用了这个例子。
为什么是"Hello World"呢?这个程序虽然简单,但它包含了一个完整程序的基本要素:它有输出功能,有完整的语法结构,能够让我们快速验证开发环境是否正常工作。就像学习一门外语时,我们总是先学"你好"一样,"Hello World"是我们进入编程世界的第一声问候。
2. 创建第一个C程序
新建文件
让我们在Dev C++中创建我们的第一个C程序。首先,启动Dev C++,然后按照以下步骤操作:
- 点击菜单栏的"文件",选择"新建",再选择"源代码"。或者更简单的方法,直接按Ctrl+N快捷键。
- 这时会出现一个新的空白编辑窗口,就像一张白纸等待我们书写。注意窗口标题栏显示的是"无标题1",说明这是一个还没有保存的新文件。
编写代码
现在,我们在空白的编辑器中输入以下代码。请一字不差地输入,包括所有的标点符号和空格:
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
输入时要特别注意以下几点:
#include <stdio.h>这一行最前面是井号(#),不是汉字的"井"。<stdio.h>中的尖括号是英文的小于号和大于号,不是中文的书名号。- 所有的标点符号都必须是英文状态下输入的,包括分号、花括号、圆括号等。
- 注意大小写,C语言是严格区分大小写的,
printf不能写成Printf或PRINTF。
保存文件
输入完代码后,我们需要保存文件。按Ctrl+S或者点击菜单"文件"→"保存"。
在保存对话框中,我们需要注意几个重要的事情:
- 选择保存位置:建议在某个固定的文件夹中保存我们的练习程序,比如在D盘创建一个"C语言练习"文件夹。
- 文件名:给文件起一个有意义的名字,比如"hello"。注意不要使用中文名字,最好使用英文。
- 文件扩展名:这一点非常重要!C语言源代码文件的扩展名必须是
.c。所以我们要保存为"hello.c",而不是"hello.txt"或其他格式。
保存完成后,你会发现编辑器的标题栏已经显示了文件的完整路径,而且代码出现了颜色(语法高亮),这说明Dev C++已经识别出这是一个C语言文件。
3. 代码详细解释
现在让我们逐行分析这个简单的程序,理解每一行代码的意思:
第一行:#include <stdio.h>
这一行叫做"预处理指令"。我们可以把它理解为"导入工具包"的指令。
stdio.h 是一个头文件,全称是"standard input/output header",意思是"标准输入输出头文件"。这个文件里包含了很多用于输入输出的函数定义,比如我们后面要用到的printf函数。
这就像我们做数学题时需要用到计算器,我们得先找到计算器并拿出来使用。在C语言中,#include <stdio.h>就是告诉编译器:"我需要使用标准输入输出功能,请把相关的工具准备好。"
第二行:空行
这是一个空行,在C语言中,空行不会影响程序的功能,但它让代码看起来更清晰。就像写文章时的分段一样,适当的空行可以让代码更容易阅读。
第三行:int main()
这一行定义了程序的"主函数"。在C语言中,每个程序都必须有且只能有一个main函数,它是程序执行的起点。
可以把main函数想象成一个故事的开头。无论程序多么复杂,计算机都会从main函数开始执行。int表示这个函数执行完毕后会返回一个整数值给操作系统。
第四行:{
这是一个左花括号,表示函数体的开始。在C语言中,花括号用来把相关的代码"打包"在一起。就像一个盒子的盖子,{表示盒子的开始。
第五行:printf("Hello World\n");
这是我们程序的核心部分,它的作用是在屏幕上显示"Hello World"。
printf是一个函数,专门用于在屏幕上打印(显示)文本。双引号里面的内容就是要显示的文字。
\n是一个特殊的符号,叫做"换行符"。它的作用是让光标移动到下一行的开头。就像我们写字时按下回车键一样。
最后的分号(;)非常重要,在C语言中,每条语句都必须以分号结尾。这就像中文句子要用句号结尾一样,是语法规则。
第六行:return 0;
这条语句表示程序正常结束,并向操作系统返回数值0。在计算机的世界里,0通常表示"成功"或"正常"。这就像完成任务后向老师报告"任务完成"一样。
第七行:}
这是右花括号,表示函数体的结束。它与前面的左花括号配对,就像盒子的底部,表示这个函数的内容到此为止。
4. 编译和运行程序
编译程序
编写完代码并保存后,我们需要将代码编译成计算机能够执行的程序。在Dev C++中,编译非常简单:
- 按F9键,或者点击菜单"运行"→"编译运行",或者点击工具栏上的绿色三角形按钮。
- 如果代码没有错误,你会看到屏幕下方的消息窗口显示编译信息,最后会显示类似"编译成功"的消息。
- 如果有错误,消息窗口会显示红色的错误信息。这时我们需要仔细检查代码,修正错误后重新编译。
运行程序
编译成功后,程序会自动运行。你会看到一个黑色的命令行窗口弹出,显示:
Hello World
然后窗口会提示"按任意键继续...",这时按任意键,窗口就会关闭。
恭喜你!你已经成功编写并运行了人生中第一个C语言程序!
5. 常见问题及解决方法
编译错误排查
初学者在编写第一个程序时,经常会遇到一些编译错误。不要担心,这是完全正常的,就像学骑自行车时会摔倒一样。让我们看看最常见的错误及解决方法:
错误1:找不到函数
如果忘记写#include <stdio.h>这一行,编译器会提示找不到printf函数。这就像要使用计算器但忘记把计算器拿出来一样。
错误2:语法错误
- 忘记分号:每条语句都必须以分号结尾
- 括号不匹配:每个左括号都必须有对应的右括号
- 大小写错误:
printf不能写成Printf
错误3:中文标点符号 如果使用了中文状态下的标点符号,编译器会无法识别。要确保所有标点符号都是英文状态下输入的。
程序运行问题
问题1:程序运行后立即关闭
有些同学可能发现程序运行后黑色窗口一闪就消失了。这是因为程序执行完毕后立即退出了。在Dev C++中,通常会自动添加"按任意键继续..."的提示,但如果没有,可以在return 0;前面添加一行system("pause");。
问题2:中文显示乱码 如果你想显示中文,可能会出现乱码。这涉及到字符编码问题,我们在后面的课程中会详细讲解。现在建议先使用英文进行练习。