1. 什么是C语言?
- C语言是一种通用的、过程式的计算机编程语言。
- 它是由丹尼斯·里奇(Dennis Ritchie)在1969年至1973年间于贝尔实验室开发,主要用于重新实现Unix操作系统。
1.1 什么是过程式的计算机编程语言
"过程式编程"是一种编程范式,它的核心思想是:程序是为解决一个问题而设计的一系列有序的步骤或指令。
说人话就是,按顺序执行代码,先第一步,然后第二步,第三步,按照步骤来做。
类似于番茄炒蛋:
- 第一步: 准备食材------洗番茄,打鸡蛋。
- 第二步: 处理食材------切番茄,搅拌鸡蛋。
- 第三步: 开火烹饪------先炒鸡蛋,盛出;再炒番茄,最后混合。
- 第四步: 出锅装盘。
你的关注点是一系列连续的、按顺序执行的步骤 。你会把一个大问题(做菜)分解成一个个小任务(步骤),然后一步一步地去完成。这就是"过程"(Procedure),在C语言中,我们用**函数(Function)** 来代表这些"步骤"或"过程"。
1.2 应用领域
- 系统编程:操作系统(如Linux、Windows内核)、驱动程序。
- 嵌入式开发:单片机、物联网设备。
- 编译器/解释器:许多语言(如Python、PHP)的解释器用C实现。
- 高性能计算:游戏引擎、科学计算。
- 跨平台开发:通过编译适配不同系统。
1.3 优缺点
优点:
- 执行效率接近汇编语言。
- 对硬件操作能力强。
- 生态系统成熟,编译器、库丰富。
缺点: - 手动内存管理易出错(内存泄漏、悬空指针)。
- 缺乏面向对象特性(需自行模拟)。
- 标准库功能相对简单(如无原生字符串类型)。
2. 第一个程序
编译器选择 :
- Visual Studio 官网下载:https://visualstudio.microsoft.com/zh-hans/?wt_mc_id=developermscom
- Microsoft Visual C++ 2010 :已经停止更新,百度网盘领取:
https://pan.baidu.com/s/1oujzinKyYcf6mNCMeslHYQ?pwd=q7rx (解压后能看到注册码)
我用的是Microsoft Visual C++ 2010 ,因为Visual Studio 软件太大,电脑配置差,运行起来太卡了。
2.1 Microsoft Visual C++ 环境配置
调试按钮
-
在工具栏空白处右击 ,选择"生成 "

-
生成之后就会出现一个新的工具栏,点击右下角的小三角。再点击"添加或移除按钮(A)",再点击"自定义"。

-
此时出现一个弹框,选中"生成解决方案 ",再选中右边的"添加命令 "

-
此时弹出"添加命令"的弹框,左边选中"调试 ",然后选中右边"开始执行(不调试) "按下"确定"按钮,再按下外面弹框的"关闭"按钮。

-
此时,我们的调试按钮就出现。

新建项目
-
选中工具栏第一个图标,新建项目,图中红色圈出来的那个,点击"新建项目 "

-
此时会出现弹框,选中中间的"Win 32 控制台应用程序 ",下面写上名称 ,如需更改文件存放路径,选择第二行右边"浏览 "。

-
又有一个弹框,点击"下一步 "

-
又有一个弹框,第一次建文件要选中附件选项 的"空项目 ",点击完成。

-
此时左边栏就会出现新建的文件夹,点击文件左边的小三角,展开文件。右击源文件 ,选中添加 ,选中新建项 。

-
出现了一个弹框,选中中间的"C++文件 ",然后填写名称 。注:名称后面要加上
.c,不然会被识别为C++文件 ,点击添加按钮 。

-
铛铛,我们新建的C文件终于出现了,可以开始我们C语言之旅了。

2.2 第一个文件
执行代码
- 编写代码
c
#include <stdio.h>
int main(void)
{
printf("hello world!");
return 0;
}
点击Ctrl+S 保存。
- 点击下图红色框框里的小三角,运行程序

- 弹出框框,显示打印内容,运行成功。

代码解析
我们来解析下面代码的含义------它们所代表的意思。
c
#include <stdio.h>
int main(void)
{
printf("hello world!");
return 0;
}
上面代码可以分为两部分,分别是#include <stdio.h>和下面其余的部分。
- 预处理部分:
#include <stdio.h>
代表提前找到需要用到的文件,在代码编译之前运行,找到文件才能去运行代码。
#:以 #开头的命令是预处理器指令。#include:将指定文件的内容 复制到#include指令所在的位置,也就是将文件复制到#include的后面。这样,你可以使用其他文件中定义的函数、宏、类型等。#include <文件名>:尖括号用于包含系统头文件。编译器会在系统标准路径中查找该文件。stdio.h:是"Standard Input Output Header"的缩写,即标准输入输出头文件 。这个头文件包含了与输入输出相关的函数声明、宏定义和类型定义。下面的printf就是stdio.h里的格式化输出函数。- 这行代码告诉编译器:"请把stdio.h文件中的所有内容复制到这里",有了这个,我们才能使用printf()等输入输出函数
- 业务代码:其余的代码
int main():定义程序的主函数,是程序的入口- int表示这个函数会返回一个整数(integer)
- main是函数名,每个C程序必须有且只有一个main函数
- 这个函数不接受任何参数
- 这一行是程序的入口点 - 程序从这里开始执行
{}:在C语言中,{}花括号用来标识代码块的范围- 左花括号 {表示main函数的主体从这里开始
- 右花括号 }表示main函数的主体到这里结束
- 所有在{}之间的代码都属于main函数
printf("hello world!"):在屏幕上输出文本- printf是输出函数(print function)
- 括号内的"hello world!"是要输出的字符串
- 双引号""用来包围字符串内容
- 分号;表示语句结束 - C语言中每条语句都必须以英文的分号结尾
- 执行效果:在屏幕上显示:hello world!
return 0:向操作系统返回程序执行状态- return表示函数结束并返回一个值
- 返回值为数字,要与因为第一行声明的 int 相对应
- 0通常表示"程序正常执行完毕"
- 在C语言约定中:返回0表示成功,非0值表示错误代码
- 这个返回值是给操作系统看的
代码执行流程:
预处理 → 编译 → 汇编 → 链接 → 执行
编写完代码后,代码执行流程如下:
- 预处理阶段:
- 预处理器会处理以#开头的指令。首先,它找到#include <stdio.h>指令,然后将stdio.h头文件的内容(包括printf函数的声明等)插入到该指令所在的位置。
- 经过预处理后,代码不再包含#include指令,而是被替换为头文件中的实际内容。
- 编译阶段:
- 编译器将预处理后的C代码翻译成汇编语言代码。它会检查代码的语法是否正确,比如括号是否匹配,语句是否以分号结尾等。
- 如果代码没有语法错误,编译器会生成对应的汇编代码。
- 汇编阶段:
- 汇编器将汇编代码转换成机器代码(目标文件,通常是.o或.obj文件)。这个文件包含的是二进制指令,但还不能直接执行,因为可能还需要链接其他库。
- 链接阶段:
- 链接器将生成的目标文件与标准库(如C标准库)中的函数进行链接。例如,我们的程序中使用了printf函数,这个函数的实际代码在C标准库中。链接器会找到printf函数的实现(通常在libc.a或类似的库文件中),并将其合并到最终的可执行文件(.exe 文件)中。
5.运行程序:
- 当我们在操作系统中运行生成的可执行文件时,操作系统会加载该程序到内存中,然后从程序的入口点(即main函数)开始执行。
- 程序按顺序执行main函数中的语句:
- 遇到printf("hello world!");时,程序会调用标准库中的printf函数,将字符串"hello world!"输出到标准输出(通常是显示器)。
- 然后执行return 0;,表示程序正常结束,并返回0给操作系统。
在文件夹中运行代码
上面提到汇编阶段会生成目标文件( .obj 文件),链接阶段生成可执行文件(.exe 文件)。
在运行完代码时,我们都能在项目文件夹中找打它们。不同的编辑器所放的位置可能不太一样,要自己找一找。如果没有看到文件后缀,参考下面图片,打开文件资源管理器,点击上面的查看标签页,选中文件扩展名,就能看到文件后缀。

- 查看我们的目标文件( .obj 文件)

- 查看可执行文件(.exe 文件)

- 程序最终执行的是 可执行文件。
- 我们也可以在这里去运行它,在可执行文件的路径那输入
cmd,按enter回车键,就会弹出命令提示符框框。

- 在cmd 中输入 可执行文件 名称也就是文件后缀带
.exe的文件,按enter回车键就能运行文件。
