源代码是什么?
源代码(source code)是程序中人类可读的文本,由程序员用 Python、Java 或 C 等语言编写,保存为纯文本文件,再由编译器或解释器转换成计算机能运行的指令。
更新于 2026年9月24日
用纯文本编辑器打开任何一个以 .py、.c 或 .java 结尾的文件,你看到的就是源代码。它和购物清单是同一类文件:字母、数字、空格和换行。让它成为程序的,是这些文本遵守了某种编程语言的规则,所以工具能把它转换成处理器可以执行的指令。
源代码长什么样
下面是一个完整的 Python 程序。每一行都是源代码,包括那行注释:计算机会忽略它,下一位程序员会读它。
Total: 12
用 C 语言写的同一个程序也是源代码,只是换了一种规则不同的语言:
#include <stdio.h>
int main(void) {
int price = 4;
printf("Total: %d\n", price * 3);
return 0;
}
一个真实的应用由成千上万个这样的文件组成。Linux 内核有超过 3000 万行源代码,一个小型网页应用也很容易有几百个文件。每个文件都带有一个扩展名,告诉工具它用的是哪种语言:
| 扩展名 | 语言 |
|---|---|
.py | Python |
.c, .h | C |
.cpp, .hpp | C++ |
.java | Java |
.js | JavaScript |
.go | Go |
.rs | Rust |
源代码是纯文本
源代码没有字体、颜色或隐藏的格式。你在编辑器里看到的颜色,是编辑器为了方便阅读加上去的,并不会保存在文件里。这就是为什么要在 VS Code 这样的代码编辑器里写代码,而绝不能用 Microsoft Word:文字处理软件会保存格式数据和“智能”引号,结果得到一个编程语言读不懂的文件,通常会被报语法错误。
正因为它只是文本,一个程序甚至可以把另一个程序的源代码存放在字符串里并运行它:
<class 'str'>
3 lines of text
Total: 12
在最后一行之前,source 只是一个普通的字符串。exec 把它交给 Python,Python 读取这段文本并执行它。这就是源代码一生的缩影:先是文本,然后才是指令。
源代码如何变成运行中的程序
电脑里的处理器读不懂 Python 或 C。它只能运行机器码,也就是专属于某一类 CPU 的二进制指令(大多数笔记本电脑和服务器是 x86-64,手机和搭载 Apple 芯片的 Mac 是 ARM)。所以必须有东西来做翻译。主要有两种方式:
- 编译器提前翻译整个程序。 运行
gcc hello.c -o hello会读取 C 源代码,并写出一个装满机器码的新文件hello。之后就算删掉hello.c,hello也照样能运行。 - 解释器直接运行源代码。 运行
python3 hello.py会启动 Python 解释器,由它读取hello.py并执行其中的指令。这种方式不会生成单独的程序文件,所以每次运行时源代码都必须在。
很多语言把两者结合起来。Java 源代码由 javac 编译成字节码(.class 文件),再由 Java 虚拟机运行这些字节码。完整的对比请看编译器和解释器的区别这一页。
源代码、目标代码和机器码
这三个术语描述的是同一个程序在不同阶段的形态:
| 术语 | 谁来读它 | 示例 |
|---|---|---|
| 源代码 | 人和编译器 | app.py 中的 total = price * 3 |
| 目标代码 | 链接器 | 由 gcc -c hello.c 生成的 hello.o |
| 机器码(可执行文件) | CPU | Linux 或 macOS 上的 hello,Windows 上的 hello.exe |
如果你用文本编辑器打开一个编译好的可执行文件,看到的会是无法阅读的符号,因为它是二进制,而不是文本。在 Mac 上,上面那个 hello 程序的前四个字节用十六进制表示是 cf fa ed fe,这是 Mach-O 可执行文件的标志。你可以用进制转换器查看这样的原始数值。
开源和闭源
谁能读到源代码,既是技术问题,也是法律问题。开源软件在许可证下公开源代码,允许任何人阅读、修改和分享。Python、Linux 和 Firefox 都是开源的。闭源(专有)软件只发布编译好的程序。Microsoft Windows 和 Adobe Photoshop 是闭源的,它们的源代码属于商业机密。
和书一样,源代码也受版权保护。在网上找到的代码,并不意味着你可以随便复用:在把任何代码复制进自己的项目之前,先查看许可证文件,它通常叫作 LICENSE。
常见误解
- “查看网页源代码能看到网站的源代码。” 它显示的是你的浏览器收到的 HTML、CSS 和 JavaScript。网站的服务器端(用 Python、Java、PHP 或其他语言编写)从不离开服务器,所以你看不到。
- “反编译器能还原出原始的源代码。” 反编译器可以从编译好的程序重建出可读的代码,但注释没有了,名字也常常丢失,所以结果只是对源代码的猜测,而不是作者写的那个文件。
- “代码和源代码是一回事。” 源代码是由人编写的版本。“代码”的范围更广,还包括机器码、字节码和自动生成的代码。
- “源代码必须用英文写。”
if、print这样的关键字是英文单词,但变量名、注释和字符串可以用任何语言。Python 3 的源文件默认使用 UTF-8 编码,所以prix = 4和# 合計を計算する都是合法的。
下一步学什么
源代码在运行之前会先被检查,大多数初学者最先遇到的就是语法错误。想了解运行源代码的两种方式有何不同,可以先读编译器是什么,再读编译器和解释器的区别。你可以在浏览器里的 Python 在线编辑器中编写和运行自己的源代码,或者开始学习 Python 课程。
常见问题
源代码有哪些例子?
app.py 这样的 Python 脚本,像 main.c 这样的 C 文件,或者网页里的 JavaScript。哪怕只是把 print("Hello") 这一行保存在一个 .py 文件里,也算源代码。Firefox 或 Linux 这样的程序,就是由数百万行源代码构建出来的。代码和源代码有什么区别?
源代码是用编程语言写成的、由人编写的程序版本。“代码”的范围更广,还包括工具从源代码生成的东西,比如机器码、字节码或自动生成的代码。日常交流中,程序员说“代码”通常就是指源代码,从上下文就能分辨。
怎样获取一个程序的源代码?
对于你自己的项目,源代码就是你写的那些文件,通常保存在 Git 仓库里。对于开源软件,源代码是公开发布的,常见于 GitHub 或 GitLab。对于闭源程序,你通常拿不到源代码:手里只有编译好的可执行文件,而反编译器最多只能给出一个近似版本,原来的注释和名字都没有了。
HTML 算源代码吗?
.html 文件就是网页的源代码,浏览器查看这些文件的功能也叫“查看网页源代码”。CSS 文件和网页加载的 JavaScript 文件也是一样。源代码管理是什么?
源代码管理也叫版本控制,是指记录项目源文件的每一次改动,让你能看到谁改了什么、回到之前的版本,并合并多人的工作。Git 是最常用的版本控制工具,GitHub 和 GitLab 等服务则在线托管 Git 仓库。