C 语言概述
计算机结构组成
计算机的组成一般分为硬件和软件两种,硬件指的是组成一个计算机的硬件设备,而软件则是在计算机中运行的各种程序。
计算机硬件组成
计算的硬件一般分为输入输出设备、中央处理器、存储这四个部分,其中中央处理器就是日常所说的 CPU,其内部包含运算器、控制器以及寄存器。存储分为内存和外存,内存中的数据在计算机关机后就消失了,而外存中的数据是可以长久保存的。
从上图可知,计算机处理的所有数据都要从内存中获取,正确的步骤一般为:输入设备输入数据到内存,控制器根据指令控制寄存器从内存中获取数据,运算器根据寄存器的数据进行运算,将得到的结果返回到内存中,输出设备从内存中获取数据并输出。
计算机系统组成
C 语言特点
优点:
- 代码量小
- 执行速度快
- 功能强大
- 移植性强
- 编程自由
缺点:
- 代码实现周期长
- 过于自由,经验不足易出错
C 语言应用领域
C 语言的应用极其广泛,从网站后台,到底层操作系统,从多媒体应用到大型网络游戏,均可使用 C 语言来开发:
- C 语言可以写网站后台程序
- C 语言可以专门针对某个主题写出功能强大的程序库
- C 语言可以写出大型游戏的引擎
- C 语言可以写出另一个语言来
- C 语言可以写操作系统和驱动程序,并且只能用 C 语言编写
- 任何设备只要配置了微处理器,就都支持 C 语言。从微波炉到手机,都是由 C 语言技术来推动的
第一个 C 语言程序
所有 C 语言文件的扩展名必须是以 .c
结尾,使用文本编辑器或 IDE 编写下面的程序
#include <stdio.h>
int main()
{
// 输出 Hello Wrold!
printf("Hello World!\n");
return 0;
}
其中 #include <stdio.h>
表示引入头文件,而 stdio.h
是系统标准输入输出库对应的头文件,当使用的是系统库函数使用 <>
,如果是自定义的头文件则使用 ""
;int main()
中的 int
表示函数的返回值类型,main
是函数名,是一个程序的唯一入口,此函数必须有,并且只有这一个;{ }
叫做代码块,一个代码块内部可以有一条或者多条语句,C 语言每句可执行代码都是 ;
分号结尾;printf("Hello World!\n");
将字符串 Hello World!
输出到屏幕上,\n
表示回车换行;return 0
返回当前函数调用,返回值要与函数的返回值一一对应。
C 语言的注释方式有两种:
//
:行注释,此符号后的所有内容都会被忽略/**/
:块注释,在此块注释中的所有内容都会被忽略
编写完上述的程序以后,需要将该程序编译成可以执行的程序,这个步骤就需要编译器来操作,编译器是将易于编写、阅读和维护的高级计算机语言翻译为计算机能解读、运行的低级机器语言的程序。最常用的编译器是 GNU 的 gcc 编译器,C/C++ 编译程序的基本步骤有四步,如下图所示:
上图中的具体内容如下:
- 预处理:基本语法
gcc -E xxx.c -o xxxx.i
,此步骤会进行宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法 - 编译:基本语法
gcc -S xxx.i -o xxx.s
,此步骤会进行语法检查,将预处理后文件编译生成汇编文件,如果发现语法错误,不会生成.s
文件,即使原本存在该文件也会将其删除,此步骤也是最耗时的一步 - 汇编:基本语法
gcc -c xxx.s -o xxx.o
,将汇编文件生成目标文件(二进制文件) - 链接:基本语法
gcc xxx.o -o xxxx.exe
,C 语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去,有数据段合并、数据地址回填、库引入等操作
编译完成以后生成可执行程序,运行此程序就会在屏幕中输出 Hello World!
。如果使用 Visual Studio 运行上述的程序,可能会出现提示窗一闪而过,解决办法如下:
- 在
return
前加上getchar()
,用来等待用户输入的操作 - 在
return
前加上system("pause")
,暂停操作 - 借助 VS 工具解决:在项目上右键选择属性 ——> 配置属性 ——> 链接器 ——> 系统 ——> 子系统 ——> 在下拉框中选择“控制台 (/SUBSYSTEM:CONSOLE)”
system
函数
函数功能:在已经运行的程序中执行另一个外部程序,此处提到的是 Windows 中的 system
函数
函数原型:
#include <stdlib.h>
// command —— 外部可执行的名字,如 calc、mspaint 等
int system(const char *command);
返回值:成功返回 0,失败返回任意非 0 值
示例代码:
#include <stdlib.h>
int main()
{
// 打开计算器
// system("calc");
// 打开画图
system("mspaint");
return 0;
}
Visual Studio 调试程序
添加行号显示:工具 ——> 选项 ——> 文本编辑器 ——> C/C++ ——> 行号选中。设置完以后进行代码调试,步骤如下:
- 设置断点(设置断点方式,在 IDE 最左侧的边框内单击即可),F5 启动调试
- 程序停止的位置,是尚未执行的指令
- 逐语句执行一下条(F11):进入函数内部,逐条执行跟踪
- 逐过程执行一下条(F10):不进入函数内部,逐条执行程序
- 添加监视:调试 ——> 窗口 ——> 监视,输入监视变量名,自动监视变量值的变化。