第零章 计算机和编程最基础概念扫盲
本章目标:在正式学习 C 语言之前,用最通俗的方式帮你建立对计算机硬件、操作系统、编程语言和开发工具的基本认知。本章不要求记住任何技术细节——读一遍,脑子里有个大概印象就够了。当你在后面学到某个概念感到困惑时,随时可以翻回来查阅。
一、概念扫盲
1.1 计算机核心硬件
一台计算机到底由哪些部件组成的?如果你拆开一台台式机的主机箱(或者想象把笔记本电脑的外壳掀开),会看到一块主板上插着大大小小的零件。这些零件看起来眼花缭乱,但归纳起来,计算机的核心硬件其实只有五大类。下面我们就用最通俗的比喻来逐一认识它们。
一、CPU(中央处理器)——计算机的“大脑“
CPU(Central Processing Unit,中央处理器)是计算机里最核心的运算部件,可以把它理解为计算机的“大脑“。你写的程序里所有的加减乘除、逻辑判断、数据搬运,最终都是由 CPU 来执行的。
CPU 的工作节奏极快——它以“GHz“(吉赫兹,每秒十亿次)为单位运转。一个 3.0 GHz 的 CPU,每秒能执行大约 30 亿个基本操作。市面上最常听到的两大 CPU 厂商是 Intel(英特尔)和 AMD,它们就像汽车界的丰田和大众,各自有不同档次的产品线。
对学编程的你来说,可以把 CPU 想象成一个运算速度极快、但记性很差的计算器——它能瞬间算出一道复杂的数学题,但你让它记住这道题和答案,它转身就忘。
二、内存(RAM)——计算机的“草稿纸“
内存(Memory,全称 RAM——Random Access Memory,随机存取存储器)是 CPU 的“草稿纸“——CPU 在运算时,所有正在处理的数据和指令都临时写在内存上面。
当你双击打开一个程序(比如浏览器),操作系统做的第一件事就是把那个程序从硬盘搬进内存,然后 CPU 才能从内存里读取它来执行。为什么要有这一步?因为 CPU 实在太快了,如果让它直接从硬盘读数据,就好像让一个百米冲刺运动员边跑边翻开一本书查资料——硬盘的读写速度完全跟不上 CPU 的节奏。内存的速度介于 CPU 和硬盘之间,起到一个“中转站“的作用。
内存有一个关键特性:断电即忘。一旦关机或断电,内存里所有暂存的数据都会瞬间消失。所以你在写文档时如果没保存就断电了——内容丢了。因为没保存的内容只存在于内存中,还没被写入硬盘。
💡 学 C 语言为什么要知道这个? C 语言中你会频繁接触到“内存地址“、“指针“这些概念——它们就是直接和内存打交道的。现在只需要记住:内存 = 草稿纸,CPU 在上面边写边算,一断电纸就变白。
三、外存(硬盘 / SSD)——计算机的“笔记本“
如果内存是“草稿纸“,那外存就是计算机的“笔记本“——用来长久保存数据的仓库。你的操作系统、安装的软件、写的文档、拍的照片、下载的电影,统统存在外存里。和内存不同,外存上的数据断电后不会消失。
外存主要有两种形态:
- 机械硬盘(HDD,Hard Disk Drive):像一台微型唱片机,里面有一片高速旋转的金属碟片和一个悬浮在上面的磁头,通过磁性来读写数据。优点是容量大、价格便宜;缺点是读写速度较慢,而且怕摔——毕竟里面有高速旋转的精密机械部件。
- 固态硬盘(SSD,Solid State Drive):纯电子元件,没有机械转动部件,数据存储在闪存芯片上。读写速度比机械硬盘快很多倍,而且安静、省电、耐摔。缺点是同样容量下比机械硬盘贵。近几年 SSD 已经基本成为新电脑的标配。
你可能还用过 U 盘 和 移动硬盘——它们本质上也是外存,只是通过 USB 接口临时插到电脑上,方便携带和转移数据。
一个日常生活中可以感受到“内存 vs 外存“速度差异的场景:当你打开一个大型软件(比如 Photoshop),启动过程需要好几秒甚至十几秒——这段时间操作系统正在把软件从外存(慢)搬运到内存(快)。一旦加载完成,软件运行就流畅了——因为 CPU 现在可以直接从内存里读取它了。
四、输入设备——计算机的“耳朵和眼睛“
计算机需要从外部世界接收信息,这个任务由输入设备完成。最常见的输入设备就是你每天都在用的:
- 键盘:把手指的按压转换成文字和命令。你敲下的每一个字符、每一个快捷键,都是通过键盘“告诉“计算机的。
- 鼠标 / 触控板:把手部的移动和点击转换成屏幕上的光标移动和操作指令。
- 麦克风:把声音(空气振动)转换成电信号交给计算机处理。
- 触摸屏:把手指在屏幕上的触摸位置直接传给计算机(手机和平板的标准配置)。
输入设备的共同特征:它们把物理世界的信息(手指的动作、声音、光线)转换成计算机能处理的电信号。
五、输出设备——计算机的“嘴巴和脸“
计算机处理完数据之后,需要把结果“表达“出来给人看或给人听,这个任务由输出设备完成:
- 显示器 / 屏幕:把计算机内部的数据转换成眼睛能看到的图像和文字。你正在读的这篇教程,就是计算机把一堆 0 和 1 通过屏幕变成你认识的中文。
- 音箱 / 耳机:把计算机内部的音频数据转换成耳朵能听到的声音。
- 打印机:把电子文档转换成纸上的墨迹。
输出设备的共同特征:它们把计算机内部的电信号,转换成人类感官能接收的物理形式(光、声音、墨水)。
一张图理清五大部件的关系:
输入设备(键盘、鼠标) ──→ 内存(草稿纸) ←──→ CPU(大脑)
│
↓ 保存
外存(笔记本)
│
↓ 读取
内存 ←──→ CPU
│
↓ 结果输出
输出设备(屏幕、音箱)
这五大部件协同工作的流程其实你每天都在经历:按下键盘上的一个键(输入)→ CPU 接收到信号并处理 → 把对应的字符写在内存里 → 把结果送出到屏幕显示出来(输出)。整个过程在几毫秒内完成,你根本感觉不到中间的步骤。
💡 学 C 语言,你主要跟谁打交道? 你写的程序本质上就是在指挥 CPU 去操作内存里的数据,必要时把结果写入外存(保存文件),或从外存读取数据(打开文件),或是向屏幕输出文字、从键盘读取输入。五者之中,CPU 和内存是 C 语言的“主战场“——后续章节中学习的变量、指针、数组,都是针对这两个部件的抽象。现在只需要对五大部件的关系有一个整体的画面感,就足够了。
1.2 操作系统:计算机的“大管家“
有了 CPU 和内存这些硬件之后,谁来管理它们呢?谁来协调“你同时打开了浏览器、放着音乐、后台还在下载文件“这些并行进行的任务呢?
这个角色就是操作系统(Operating System,简称 OS)。它是运行在计算机硬件之上的第一层软件,是所有其他软件的“大管家“。你正在用的 Windows、macOS、Linux,就是当今最主流的三种操作系统。
操作系统最核心的四项职责:
- 管理硬件资源:把 CPU 的计算时间分配给各个程序,把内存的空间划给各家用,让所有程序井井有条地共享一台机器的硬件。当你感觉电脑“卡“的时候,往往是操作系统在疲于处理某个耗尽了 CPU 或内存的程序。
- 提供用户界面:让你能通过桌面、窗口、鼠标来操作电脑(图形界面),也能通过终端输入文字命令来操作(命令行界面)。
- 管理文件:你硬盘上的文件夹和文件——创建、删除、移动、复制——背后都是操作系统在处理。
- 运行程序:当你双击一个程序图标时,是操作系统负责把它从硬盘加载到内存里,然后让 CPU 去执行它。
用一句话概括它们之间的关系:应用程序(比如你写的 C 程序)跑在操作系统之上,操作系统跑在硬件之上。 你写的程序需要通过操作系统来使用 CPU、内存和硬盘。这套“硬件 → 操作系统 → 应用程序“的层级结构,是理解计算机工作原理最重要的框架。
1.3 计算机的“母语“:0 和 1 的故事
首先我们要明白,计算机本身并不能直接理解文字、图片或声音。它的核心——CPU,只认识一种东西:电信号。
大家还记得初中物理里学过的简单电路吗?一个电池、一个开关、一个灯泡。当开关闭合,电流流通,灯泡就亮了;开关断开,灯泡熄灭。电路中的开关,只有“通“和“断“两种状态。
CPU 内部密密麻麻地集成了数亿甚至上百亿个肉眼看不见的微型“电子开关“,它们叫晶体管。每个晶体管同样可以看成一个超微小的开关:要么让电流通过(通),要么不让电流通过(断)。这两种状态,人类习惯于用数学符号来表示:
- “通” → 用 1 表示
- “断” → 用 0 表示
这样,一个晶体管就能代表一个数字,要么是 0,要么是 1。 这就构成了计算机最底层的语言——二进制。
一个开关只能表示两种可能(比如“是“或“否“)。但如果把很多个开关组合在一起,能表示的东西就海量了。比如,用 8 个开关一组,就能组合出 2⁸ = 256 种不同的状态,足够表示我们常用的数字、大小写字母和标点符号了。无数个 0 和 1 的组合,就能代表指令、数据、图像、音乐……世间万物在计算机里,最终都化为了由 0 和 1 组成的洪流。
所以,计算机唯一能“读懂“并直接执行的,就是由 0 和 1 组成的、针对特定 CPU 设计好的命令,这叫“机器语言“。 对于人来说,满屏的 0 和 1 比天书还难读,但这确实是计算机的“母语“。
1.4 编程,就是“指挥“与“翻译“
既然计算机只懂 0 和 1,而我们人类习惯用自然语言和数学符号来思考,那怎么让计算机帮我们做事呢?
编程,本质上就是把我们想让计算机完成的任务,用一种它能理解的方式告诉它。在最早最早的时候,计算机科学家们确实就是直接写 0 和 1 去指挥机器的,但效率极低,极其容易出错。于是人类不断创造更接近我们思维方式的“语言“,并同时发明能把这种语言“翻译“成机器语言的工具。
这个“人类写 → 工具翻译 → 计算机执行“的过程,就是编程的核心。接下来我们就看看,人类是怎么一步步把这件事做得越来越顺手的。
1.5 编程语言的进化史:越来越像人话
人类是怎么把“天书“一步步变成“人话“的?
-
第一代:机器语言——由纯粹的 0 和 1 组成,是 CPU 唯一能直接执行的。难写、难读、难改,只有机器喜欢。
-
第二代:汇编语言——人们开始用简短的英文助记符来代替 0 和 1 指令。比如用
MOV表示移动数据,用ADD表示加法。这好记多了!但汇编语言仍然与具体硬件紧密绑定,换个 CPU 可能指令就不一样了。它需要一个叫汇编器(Assembler)的程序把它翻译成机器语言。 -
第三代:高级语言——人类追求的是更接近数学公式和自然语言、与具体硬件无关的编程语言。这就是我们今天使用的主流:
- FORTRAN(1950 年代):第一种广泛使用的高级语言,主要用于科学和工程计算。
- C 语言(1972 年诞生):里程碑式的语言,在贝尔实验室诞生,被用来重写 UNIX 操作系统。C 语言既具有高级语言的易懂性,又能像汇编一样直接操作硬件,高效且强大,至今仍是系统编程和嵌入式领域的王者。
- C++(1980 年代):在 C 语言的基础上增加了“面向对象“等编程思想,让管理大型复杂软件成为可能。它和 C 语言一脉相承,功能更丰富。
- Java(1995 年):由 Sun 公司推出,口号是“一次编写,到处运行“。Java 程序先被编译成叫“字节码“的中间格式,然后在任何装有 Java 虚拟机(JVM)的设备上都能运行,在互联网时代大放异彩。
我们接下来要踏上的,就是 C/C++ 这两门经典编译型语言的学习之路。
1.6 两大家族:编译型与解释型
高级语言写好了,怎么变成机器能懂的 0 和 1 呢?根据翻译方式的不同,高级语言分成了两大家族:
编译型语言(如 C、C++)
想象你要把一本英文小说送给一位不懂英文的朋友。你找一位翻译,让他把整本书一次性全部翻译成中文,然后装订成一本新书送给他。他拿到中文书直接就能流畅阅读。
在这个比喻中:英文原稿 = 源代码,翻译官 = 编译器(Compiler),翻译出的中文书 = 可执行文件。程序运行时,CPU 直接执行那个已经被编译好的可执行文件,所以运行速度通常很快。
解释型语言(如 Python、JavaScript)
这一次,你请的是一位“同声传译“。你带着朋友去听一场英文演讲,翻译官在旁边,演讲人说一句,他就立刻翻译一句给朋友听。演讲结束,朋友也明白了内容,但并没有产生一本完整的“中文演讲稿“。
在这个比喻中:“同声传译” = 解释器(Interpreter)。它不需要提前生成可执行文件,而是边读源代码边翻译执行。这种方式非常灵活,调试方便,但运行速度通常比编译型慢。
混合型(如 Java)——Java 结合了二者:先用编译器把源代码翻译成“字节码“(不是最终的机器码),然后由 Java 虚拟机(JVM)去执行这个字节码,从而实现跨平台。
我们学的 C 语言属于编译型,所以理解“编译器是什么“和“可执行文件是什么“,是学习路上必须迈过的第一道坎。
1.7 编译器:你的专属“翻译官“
编译器本身也是一个程序。它的工作,就是把我们写好的高级语言源代码文件(比如 .c 文件),经历复杂的分析、优化,最终生成机器指令。
对现在的你来说,只需要记住编译过程包含核心两步:
- 编译:编译器把你的源代码翻译成机器语言。
- 链接(编译器会自动调用这一步):把翻译好的代码和系统自带的“标准功能“打包在一起,最终生成操作系统可以直接运行的可执行文件。
市面上有很多优秀的 C/C++ 编译器。本教程使用的是 Clang——目前三大主流编译器之一,跨平台、错误提示友好。第 0.5 章会详细讲解它的安装和配置。
1.8 可执行文件:程序的“成品“
前面反复提到了“可执行文件“这个词——它是编译过程的最终产物,是你写的程序在计算机里的“可运行形态“。那么它到底是什么?在不同操作系统上又有什么区别?
在 Windows 上,可执行文件以 .exe 为后缀名。当你双击一个 .exe 文件或者在终端里输入它的名字时,操作系统就会把它加载到内存里,CPU 开始逐条执行里面的机器指令。比如 hello.exe、game.exe 就是典型的 Windows 可执行文件。
在 macOS 和 Linux 上,可执行文件通常没有特定的后缀名。一个文件能不能“执行“,不看它叫什么名字,而看操作系统是否给它标记了“可执行权限“。所以你看到的可执行文件直接就是 hello、my_program 这样的名字。在终端里运行时需要在前面加 ./(比如 ./hello),意思是“在当前目录下找这个文件来运行“。
为什么会有这个差异?这是两种不同的设计哲学:
- Windows 习惯用文件后缀名来判断文件类型——
.exe就是可执行程序,.docx就是 Word 文档,对普通用户很直观。 - macOS / Linux 习惯用文件属性和权限来判断文件能不能执行——跟它叫什么名字无关,而跟操作系统给它标记了什么权限有关。这种设计更灵活,但对新用户来说不如后缀名直观。
对于学 C 语言的你来说,只需要记住一句话:你写的
.c源文件经过编译器翻译后,在 Windows 上生成.exe文件,在 macOS / Linux 上生成一个没有特定后缀的可执行文件。 不管哪种形态,它们都是你的程序从“文字“变成“软件“的成品。
1.9 调试器:程序的“听诊器“和“X 光机“
程序不可能每次都一次写对,里面总会有错误,我们称为 Bug。很多时候光盯着代码看很难找出问题在哪,这时就需要调试器(Debugger)出马。
调试器能让你在程序运行时随时“暂停时间“:
- 设置断点:让程序运行到某一行时自动暂停,就像按下了暂停键。
- 单步执行:让程序一行一行地慢动作运行,你可以观察每一步产生了什么影响。
- 查看变量:在暂停时“偷看“程序内部某个变量的当前值,看它是不是你期望的样子。
有了调试器,你就像有了一副能透视程序内部运作的眼镜,任何 Bug 都无处遁形。调试器的具体使用会在后续章节中结合实际代码来讲解。
1.10 文件路径:告诉计算机“文件在哪里“
计算机里的文件都放在一层一层的文件夹中。所谓文件路径,就是描述一个文件或文件夹所在位置的一串文字。比如你想告诉别人“作业本放在书桌左边第二个抽屉里“,在计算机里就要写成类似这样的路径:
C:\Users\你的名字\Desktop\hello.c
或者:
/Users/你的名字/Desktop/hello.c
这里最容易让新手困惑的地方,是路径里的分隔符不一样:
- Windows 传统上使用反斜杠
\,例如C:\Users\Alice\Desktop\hello.c。 - macOS / Linux 使用正斜杠
/,例如/Users/alice/Desktop/hello.c或/home/alice/hello.c。
为什么 Windows 路径前面常常有 C:?因为 Windows 习惯把不同磁盘分成不同的“盘符“,比如 C:、D:、E:。而 macOS / Linux 把整个文件系统组织成一棵从 / 开始的目录树,一般没有 C:、D: 这种盘符写法。
那 Windows 能不能用 / 呢? 大多数情况下可以。Windows 底层和很多现代工具都能识别 / 作为路径分隔符,比如下面两种写法通常都能指向同一个文件:
C:\Users\Alice\Desktop\hello.c
C:/Users/Alice/Desktop/hello.c
不过要注意:在 Windows 的某些命令行工具里,/ 也可能被当作命令选项的开头,例如 dir /? 表示查看帮助。因此在 Windows 终端中手写路径时,看到别人使用 \ 很正常;在编程工具、配置文件、Git、CMake 或很多跨平台教程中看到 /,也很正常。
对于学 C 语言的你来说,现在只需要记住:Windows 路径常见写法是
\,macOS / Linux 是/;Windows 在很多场景也能识别/,但命令行里偶尔会因为选项语法产生差异。 后续教程中如果看到src/ch01-basics/hello.c这样的写法,通常是为了让路径在不同系统上都更容易阅读和使用。
二、计算机工具的简单使用
2.1 终端:与计算机对话的文字窗口
时间倒退回 50 多年前。那时候的计算机像一间屋子那么大,而且根本没有我们现在熟悉的桌面、鼠标、图标和窗口。
那么那时的程序员怎么跟这台庞然大物交流呢?他们需要一台看起来像老式打字机的设备,通过长长的线缆连接到远处的主机上。程序员在这台“打字机“上敲下命令,主机执行完之后,再把结果传回来显示出来。这个用来输入命令和接收结果的设备,就是终端(Terminal)的最初形态——当时人与计算机交互的唯一桥梁。
后来个人电脑普及了,图形化的操作系统(比如 Windows)让一切都变得漂亮和易用。但操作系统内部依然保留了一个“回到过去“的入口——一个黑乎乎的、只有文字的窗口。在这个窗口里,图形界面能用鼠标做的绝大多数事情,都可以通过敲纯文字的命令来完成。这个黑窗口,就是现代操作系统中的终端模拟器(简称“终端“)。
为什么学编程一定要用终端? 很多核心的开发工具——编译器、Git、调试器——最初都是为命令行设计的。通过终端可以用最直接、最灵活的方式控制它们。这正是程序员的“标准工作台“——很多在图形界面里需要来回点击十几次的操作,在终端里一句命令就能搞定。
Windows 如何打开终端:
- 右键点击任务栏上的 Win 图标(开始菜单图标),在菜单中选择 “终端”(Windows 11)或 “Windows PowerShell”(Windows 10)
- 或者按键盘上的
Win键,输入cmd或powershell,然后按回车
打开后你会看到一片深色背景,上面有一行类似 C:\Users\你的名字> 的文字,后面跟着一个闪烁的光标——这就是终端,正在等你输入命令。
macOS 如何打开终端:
- 在“启动台 → 其他“中找到 “终端”(Terminal)
- 或者按
Cmd + 空格,在搜索框中输入“终端“,然后按回车
打开后你会看到类似 MacBook-Pro:~ 你的名字$ 的文字和一个光标。
基本命令行操作——打开终端后试试这几条:
无论 Windows 还是 macOS,终端的使用方式都是一样的:输入命令 → 按回车 → 看计算机返回结果。以下是几条最基础的操作,现在就打开终端试一试:
| 操作 | Windows 命令 | macOS / Linux 命令 | 效果 |
|---|---|---|---|
| 看看当前位置 | dir | ls | 列出当前目录下有哪些文件和文件夹 |
| 进入某个文件夹 | cd 文件夹名 | cd 文件夹名 | 切换工作目录到指定文件夹 |
| 返回上一级 | cd .. | cd .. | 回到上一层文件夹 |
| 清空屏幕 | cls | clear | 把终端屏幕上的内容清干净 |
试着在你的终端里敲一下 dir(Windows)或 ls(macOS),看看它列出来的文件列表——是不是跟你用资源管理器(或访达)看到的完全一样?是的,它们是同一批文件,只是查看的方式不同。
💡 终端不可怕,它只是一条用文字与计算机对话的通道。 把它当作你的新伙伴,从今天就打开它敲几条命令试试,慢慢就熟了。
2.2 环境变量:系统的“通讯录“(附 Windows 配置指南)
当你在终端敲下 clang 这个命令时,系统是怎么知道要去哪里找到编译器这个程序的呢?这就要靠环境变量。
环境变量是操作系统里保存的一批全局设置,就像一本通讯录。其中最重要的一个叫做 PATH——它记录了一连串文件夹的路径。当你输入一个命令时,系统会按顺序去这些文件夹里寻找同名的可执行程序。一旦找到就执行它;如果翻遍了所有路径都找不到,就会提示“‘xxx’ 不是内部或外部命令“。
举个例子:你输入 notepad 能打开记事本,是因为 notepad.exe 所在的 C:\Windows\System32 目录早就被写进 PATH 里了。
当我们自己安装编译器时,如果安装程序没有自动帮我们把编译器的目录添加到 PATH 里,终端就无法直接调用它。这时就需要手动配置环境变量。
Windows 配置步骤:
- 在“此电脑“上右键 → 属性 → 高级系统设置 → 环境变量
- 在“系统变量“中找到
Path,选中后点击“编辑“ - 点击“新建“,把编译器的可执行文件所在的目录路径粘贴进去(比如
C:\Program Files\LLVM\bin) - 点击“确定“保存所有窗口
- 重新打开终端,新配置才会生效
配置完成后,在终端里输入 clang --version,如果能正常输出版本信息,说明环境变量配置成功。
如果安装编译器时勾选了“Add to PATH“选项(第 0.5 章安装步骤中会反复提醒),安装程序会自动帮你完成以上步骤。这里只需要了解原理,万一自动配置不成功,你知道去哪里手动修。
2.3 Clang 编译器的基本使用
安装好 Clang 之后,你就可以在终端里通过 clang 命令来编译 C 程序了。编译器的使用遵循一个统一的模式:
clang 源文件.c -o 输出文件名
拆开来看:
clang:调用 Clang 编译器源文件.c:你要编译的 C 源代码文件-o:指定输出文件的名字(o = output)输出文件名:你希望生成的可执行文件叫什么
举个例子:
# Windows
clang hello.c -o hello.exe
# macOS / Linux
clang hello.c -o hello
编译成功之后,运行生成的可执行文件:
# Windows
hello.exe
# macOS / Linux
./hello
如果屏幕上出现了你期望的输出(比如 “Hello, World!”),恭喜——你走通了生命中第一个 C 程序的完整流程:编写 → 编译 → 运行。关于 clang 的更多细节,第一章的末尾还有一个小贴士专门展开。
2.4 Git:给你的代码建一座“时光机“
Git 是一个版本控制系统。它有什么用呢?
想象你在写一篇非常重要的长篇论文。你可能会这样保存:论文_v1.docx、论文_v2_修改了开头.docx、论文_最终版.docx、论文_最终版打死也不改了.docx……如果哪天你发现删掉的一段话其实很精彩想找回来,面对这一堆文件就崩溃了。
Git 完美解决了这个问题。它像一台时光机,能自动记录下你的项目文件的每一次改动。有了 Git,你就可以放心大胆地修改代码,因为所有历史都被安全保存着,随时可以“读档“回到过去。
基本工作流程(都在你自己的电脑上完成):
| 步骤 | 命令 | 做了什么 |
|---|---|---|
| ① 初始化 | git init | 告诉 Git:“开始管理这个文件夹吧!” |
| ② 暂存 | git add 文件名 | 把改动的文件加入“待提交清单“(暂存区) |
| ③ 提交 | git commit -m "说明信息" | 正式将暂存区的改动永久记录在仓库里,形成一次“存档“ |
| ④ 查看 | git log | 查看所有的提交历史记录 |
每当你完成一个有意义的小改动(比如“修好了一个 bug“、“添加了登录功能”),就执行一次 ②→③ 的流程。这样,你的整个项目就像一本翻页日记,每一页都清清楚楚地记录着谁在什么时候改了什么。
这些操作都在终端里完成。更详细的 Git 用法会在后续章节中结合实际项目逐步展开。现阶段只需要知道 Git 是什么、大概怎么用就够了。
2.5 GitHub:代码的云端家园
Git 在你的电脑上建造了一座单机版“时光机“,而 GitHub 就是为这座时光机插上网线的云端托管平台。
你可以把本地的 Git 仓库推送到 GitHub 上,这会带来几个实实在在的好处:
- 备份:代码不仅在一台电脑上,云端还有一份。电脑坏了也不怕。
- 同步:在家里的台式机上写完 push,到公司笔记本上 pull 下来继续工作,无缝衔接。
- 协作:世界各地的开发者可以共同为一个项目贡献代码,轻松分享彼此的改动。
- 作品集:对于程序员来说,GitHub 个人主页就是一份活的技术简历和作品展示。
简单记:Git 是工具(运行在终端里),GitHub 是网站(在浏览器里访问)。 我们以后的练习代码也都会上传到 GitHub,从一开始就养成备份和分享的好习惯。
⚠️ 关于网络访问: GitHub 的服务器部署在海外,国内访问时有概率出现网页打不开、或
push/pull超时的情况。这是网络环境的问题,并非 Git 或 GitHub 本身出了故障。遇到这种情况需要自行解决网络连通性(通俗地说就是“需要魔法“),这不是本教程的范畴,请自行搜索了解。如果你希望使用国内的替代平台,Gitee(码云,gitee.com)和 GitCode(gitcode.com)是目前最主流的选择。它们的操作逻辑和 GitHub 几乎一致——同样基于 Git,同样是网页端托管,同样支持
push/pull/clone等操作。本教程以 GitHub 为默认演示平台,但你完全可以把同样的 Git 命令用于 Gitee 或 GitCode,把远程仓库地址换成对应的链接即可。