C 语言概述

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++ ——> 行号选中。设置完以后进行代码调试,步骤如下:

  1. 设置断点(设置断点方式,在 IDE 最左侧的边框内单击即可),F5 启动调试
  2. 程序停止的位置,是尚未执行的指令
  3. 逐语句执行一下条(F11):进入函数内部,逐条执行跟踪
  4. 逐过程执行一下条(F10):不进入函数内部,逐条执行程序
  5. 添加监视:调试 ——> 窗口 ——> 监视,输入监视变量名,自动监视变量值的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xjjeffery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值