Intro
通过这个板块,我们会学习 C语言 的基础知识
前置知识
在 正式开始 以及 环境配置 之前,我们先使用经典的 Helloworld 来对 C语言有一个大概的认识
我们 创建一个文件 Helloworld.c ,这是其内容:
#include <stdio.h>
int main()
{
printf("Hello, World! \n");
return 0; /*表示退出程序终止 main() 函数,并返回值 0*/
}
代码解释:
-
这段代码的功能是在控制台输出一句
Hello, World!并换行 -
所有的 C 语言程序都需要包含 main() 函数。 代码从 main() 函数开始执行。
-
stdio.h 是一个头文件 (标准输入输出头文件) , #include 是一个预处理命令,用来引入头文件。
当编译器遇到 printf() 函数时,如果没有找到 stdio.h 头文件,会发生编译错误。
-
字符串应该用双引号而不是单引号,因为在C语言中,单引号用于字符字面量(例如 'a'),是单个字符,并且是整数类型。双引号用于字符串字面量(例如 "hello"),表示字符数组。
-
C 语言的标准库(如
stdio.h)通常由 编译器提供,不需要单独安装。
这种以 .c 结尾的文件,叫做 C语言的 源文件,里面包含的就是源代码。
如果你学过 Python,你应该知道在运行代码前,需要从网上下载并安装 Python 的安装包。
但是 C 语言不需要像 Python 那样安装运行时环境,那 C语言 是怎么运行的呢?
具体地说,上面这个 Helloworld.c 文件是如何运行的呢?
C 语言的运行 分为两个主要阶段:
-
编译阶段(转换成机器码):
需要一个名为 编译器 的工具,把 使用C语言写的源代码 重新写成 计算机可以直接读懂的 机械码。所谓的 机械码,就是我们在日常科幻电影中看到的 "1001011" 这样的0和1的 二进制组合(我们知道计算机的底层逻辑就是无数个“是”或“否”, 1 表示是,0 表示否)。
-
运行阶段(执行二进制文件)
上一步生成的 机械码 直接由 CPU 执行,是计算机能理解的 二进制指令。同时由于他完全由0和1构成,人类是无法直接理解的。
而 Python则不同,我们安装的 Python安装包中已经包含了一个名叫 IDE 的工具,也就是 Python解释器(如 python.exe),他的作用是把 Python 里的代码逐行翻译成 C 语言,然后再自动把 C 语言逐行翻译成 机器码,然后自动运行 机器码。中间存在层层的翻译,这就是为什么Python 这么简单方便(因为不用考虑编译),但是运行速度这么慢。
总而言之:
| 语言 | 类型 | 运行方式 |
|---|---|---|
| Python | 解释型语言 | 代码逐行解释执行,需要安装 Python 解释器 |
| C 语言 | 编译型语言 | 代码先编译成二进制,然后运行,无需额外运行时 |
这里为了便于理解,简化了 Python 的实际运行过程。其实Python 的实际运行流程更复杂,并不是直接翻译成C语言然后编译的。然而一般使用Python进行编程不需要像使用C 一样对运行的流程非常了解,因为Python 是高度封装的。实际的 Python运行流程如下(仅供了解)
Python 有两种运行模式:解释模式 和 编译模式
解释模式:我们可以直接在命令行中 输入python 来进入解释模式,其运行流程如下
- Python 解释器(如 CPython)会逐行解析代码并直接执行。
- 解析时会转换成 字节码(bytecode)(字节码是一种 介于 Python 代码和机器码之间的中间代码。)
- 字节码不保存,直接由 Python 虚拟机(PVM, Python Virtual Machine) 解释执行。
编译模式:对于一个写好的脚本 hello.py,使用命令 python hello.py 来运行,流程如下:
- 解析 Python 源代码(
hello.py)。 - 编译成字节码(存储为
.pyc文件)。 - Python 虚拟机(PVM)执行字节码,最终由 CPU 执行对应的 机器码。
回到 C语言,我们刚刚说到 C语言本身不需要安装,但是需要一个名为 编译器(如 GCC、Clang、MSVC) 的工具,把源代码翻译成 机械码。
因此我们首先需要学会的就是如何安装和使用 编译器