Free Pascal 完整教程
第一部分:入门与基础
第一章:什么是 Free Pascal?
1 简介 Free Pascal (FPC) 是一个功能强大、跨平台的 32 位、64 位和 16 位 Pascal 及 Delphi 兼容编译器,它的目标是生成快速、高效的本地代码,同时保持高度的兼容性。

- 开源免费:遵循 GNU General Public License (GPL),你可以免费使用、修改和分发。
- 跨平台:支持 Windows、Linux、macOS、FreeBSD、DOS 等多种操作系统。
- 兼容性好:高度兼容 Borland Pascal (Turbo Pascal) 和 Delphi (版本 2 到 7) 的语法和功能,这使得从这些环境迁移过来非常容易。
- 功能强大:支持面向对象编程、泛型、接口等现代编程特性。
2 Free Pascal 与 Lazarus 的关系 很多人会将 Free Pascal 和 Lazarus 混淆,它们的关系如下:
- Free Pascal (FPC):是编译器,它负责将你写的 Pascal 源代码(
.pas文件)转换成可执行文件(如 Windows 下的.exe)。 - Lazarus:是集成开发环境,它提供了图形用户界面,包括代码编辑器、窗体设计器、调试器、项目管理器等,让你能更方便地编写和调试程序。
FPC 是引擎,Lazarus 是驾驶舱。 你可以只用 FPC 在命令行下编程,但绝大多数开发者会选择 Lazarus 来获得高效的开发体验,本教程将主要围绕 Lazarus 展开。
第二章:环境搭建
1 下载与安装
- 访问官网:打开浏览器,访问 Free Pascal 官方网站 https://www.freepascal.org/。
- 下载 Lazarus:在官网首页找到 "Download" 链接,进入下载页面,对于初学者,最简单的方式是下载 Lazarus 的完整安装包(通常包含 FPC 编译器),根据你的操作系统选择对应的版本(Windows, macOS, Linux)。
- 安装:
- Windows:下载
.exe文件,双击运行,按照安装向导的提示进行安装即可,建议安装时勾选 "Add to PATH" 选项,方便在命令行中使用。 - macOS:下载
.dmg文件,拖拽到应用程序文件夹。 - Linux (Debian/Ubuntu):可以通过包管理器安装,
sudo apt-get install lazarus。
- Windows:下载
2 验证安装 安装完成后,打开 Lazarus,你会看到一个类似 Delphi 的界面,这表明安装成功。

第三章:你的第一个程序 - "Hello, World!"
这是学习任何编程语言的经典第一步。
1 创建新项目
- 打开 Lazarus。
- 点击菜单
File->New->Project->New Project...。 - 在弹出的窗口中,选择
Console Application(控制台应用程序),然后点击OK。 - Lazarus 会询问是否保存项目,选择一个位置并保存。
2 编写代码
Lazarus 会自动为你生成一个包含 program 和 begin...end 框架的源代码文件,找到 WriteLn 这一行,它可能已经被注释了(前面有 或 ),取消注释或直接修改代码如下:
program HelloWorld;
begin
WriteLn('Hello, World!');
ReadLn; // 等待用户按下回车键,防止控制台窗口立即关闭
end.
代码解释:

program HelloWorld;:定义程序名为HelloWorld。begin...end.:这是 Pascal 程序的主体,所有可执行代码都写在这里。WriteLn('Hello, World!');:WriteLn是“写一行”的过程,它会将在括号内的文本(字符串)输出到控制台,并自动换行。ReadLn;:ReadLn是“读取一行”的过程,它用于暂停程序,等待用户输入并按下回车键,这样你就能看到输出结果,而窗口不会一闪而过。end后面的句点表示整个程序的结束。
3 编译与运行
- 点击工具栏上的绿色 运行 按钮(或按快捷键
F9)。 - Lazarus 会首先编译你的代码,然后运行它。
- 如果一切顺利,你会看到一个黑色的控制台窗口,上面显示着 "Hello, World!",并等待你按下回车键。
恭喜!你已经成功编写并运行了你的第一个 Free Pascal 程序!
第四章:基本语法与数据类型
1 变量与常量
变量:用于存储数据,其值在程序运行过程中可以改变。
- 声明:使用
var关键字。var myAge: Integer; // 声明一个整型变量 myName: String; // 声明一个字符串变量 price: Real; // 声明一个实型(浮点数)变量 isStudent: Boolean; // 声明一个布尔型变量
- 赋值:使用 赋值符号。
myAge := 25; myName := 'Alice'; isStudent := True;
常量:用于存储不会改变的数据。
- 声明:使用
const关键字。const Pi = 3.14159; MaxUsers = 100;
2 基本数据类型
| 类型 | 描述 | 示例 |
|---|---|---|
Integer |
整数,用于存储没有小数部分的数字。 | 10, -5, 0 |
Real |
实数,用于存储带小数部分的数字。 | 14, -0.001, 0 |
String |
字符串,用于存储文本。 | 'Hello', 'Free Pascal'` |
Char |
单个字符。 | 'A', '7', '$'` |
Boolean |
布尔值,只能是 True 或 False。 |
True, False |
3 基本输入输出
- 输出:
Write(内容),不换行。WriteLn(内容),自动换行。
- 输入:
Read(变量):从控制台读取输入并存入变量,不等待换行(较少直接使用)。ReadLn(变量):从控制台读取一行输入并存入变量,等待用户按下回车。
示例:
program InputOutputDemo;
var
userName: String;
userAge: Integer;
begin
Write('Please enter your name: ');
ReadLn(userName);
Write('Please enter your age: ');
ReadLn(userAge);
WriteLn('Hello, ', userName, '! You are ', userAge, ' years old.');
ReadLn;
end.
第五章:流程控制
1 条件语句
-
if...then...else
var score: Integer; begin Write('Enter your score: '); ReadLn(score); if score >= 60 then WriteLn('You passed!') else WriteLn('You failed.'); end.if score >= 60 then:score大于或等于 60。WriteLn('You passed!'):执行 "You passed!"。else:否则。WriteLn('You failed.'):执行 "You failed."。
2 循环语句
-
for...to...do (用于已知次数的循环)
var i: Integer; begin for i := 1 to 5 do WriteLn('Count: ', i); end.输出从 1 到 5 的数字。
-
while...do (用于条件循环)
var count: Integer; begin count := 1; while count <= 5 do begin WriteLn('Count: ', count); count := count + 1; // 别忘了增加计数器,否则会无限循环! end; end.
第二部分:进阶主题
第六章:过程与函数
过程和函数是组织代码、实现代码重用的基本单元。
1 过程 执行一系列操作,但没有返回值。
procedure SayHello(name: String); // name 是参数
begin
WriteLn('Hello, ', name, '!');
end;
// 调用过程
begin
SayHello('Bob'); // 输出: Hello, Bob!
end.
2 函数 执行一系列操作,并返回一个值。
function Add(a, b: Integer): Integer; // a, b 是参数,Integer 是返回值类型
begin
Add := a + b; // 将结果赋给函数名
end;
// 调用函数
var
sum: Integer;
begin
sum := Add(10, 20);
WriteLn('The sum is: ', sum); // 输出: The sum is: 30
end.
第七章:数组与字符串
1 数组 用于存储一组相同类型的元素。
var
numbers: array[1..5] of Integer; // 声明一个包含5个整数的数组
i: Integer;
begin
// 赋值
numbers[1] := 10;
numbers[2] := 20;
numbers[3] := 30;
numbers[4] := 40;
numbers[5] := 50;
// 读取和遍历
for i := Low(numbers) to High(numbers) do // Low 和 High 是内置函数,获取数组下标范围
WriteLn('Element ', i, ': ', numbers[i]);
end.
2 字符串操作 Pascal 提供了丰富的字符串处理函数。
var
s1, s2: String;
begin
s1 := 'Hello';
s2 := ' World';
// 连接
WriteLn(s1 + s2); // 输出: Hello World
// 获取长度
WriteLn('Length of s1: ', Length(s1)); // 输出: Length of s1: 5
// 截取子串
WriteLn('Substring: ', Copy(s1, 2, 3)); // 输出: Substring: ell
// 查找
WriteLn('Position of "lo": ', Pos('lo', s1)); // 输出: Position of "lo": 4
end.
第八章:记录
记录是一种可以将不同类型的数据组合在一起的数据结构,类似于 C/C++ 中的 struct。
// 定义一个记录类型
type
TStudent = record
Name: String;
Age: Integer;
Score: Real;
end;
var
student1: TStudent; // 声明一个 TStudent 类型的变量
begin
// 访问记录的成员
student1.Name := 'Charlie';
student1.Age := 20;
student1.Score := 88.5;
WriteLn('Student Name: ', student1.Name);
WriteLn('Student Age: ', student1.Age);
WriteLn('Student Score: ', student1.Score:0:1); // :0:1 表示总宽度为0,保留1位小数
end.
第九章:面向对象编程
Free Pascal 支持强大的面向对象编程特性,如类、继承、多态等。
1 类的定义与使用 类是记录的扩展,它不仅可以包含数据(字段),还可以包含操作这些数据的过程和函数(方法)。
type
// 定义一个类
TPerson = class
private
FName: String; // 私有字段,只能在类内部访问
public
// 构造函数,用于创建对象时初始化
constructor Create(name: String);
// 公共方法,可以被外部调用
procedure IntroduceYourself;
end;
// 实现构造函数
constructor TPerson.Create(name: String);
begin
FName := name;
end;
// 实现方法
procedure TPerson.IntroduceYourself;
begin
WriteLn('Hi, I am ', FName);
end;
// 使用类
var
person1: TPerson;
begin
person1 := TPerson.Create('David'); // 创建对象
person1.IntroduceYourself; // 调用方法
// 对象使用完毕后,最好释放内存
person1.Free;
end.
第十章:文件操作
1 文本文件操作
var
f: TextFile; // 文本文件类型
line: String;
begin
// 写入文件
AssignFile(f, 'test.txt'); // 关联文件变量
Rewrite(f); // 以写入模式打开(如果文件存在则覆盖)
WriteLn(f, 'This is line 1.');
WriteLn(f, 'This is line 2.');
CloseFile(f); // 关闭文件
// 读取文件
AssignFile(f, 'test.txt');
if FileExists('test.txt') then // 检查文件是否存在
begin
Reset(f); // 以读取模式打开
while not Eof(f) do // Eof 检查是否到达文件末尾
begin
ReadLn(f, line);
WriteLn('Read from file: ', line);
end;
CloseFile(f);
end
else
WriteLn('File not found!');
end.
第三部分:学习资源与总结
第十一章:总结与学习路径
- 扎实基础:熟练掌握变量、数据类型、流程控制、过程和函数,这是所有编程语言的基石。
- 理解数据结构:深入掌握数组、字符串、记录和集合。
- 拥抱 OOP:学习类、对象、继承和多态,这是构建大型、可维护程序的关键。
- 实践!实践!再实践!:尝试做一些小项目,比如计算器、通讯录、简单的文本编辑器等,项目驱动学习是最有效的方式。
- 学习 Lazarus GUI:当你对语言本身熟悉后,开始学习使用 Lazarus 的窗体设计器来创建图形界面应用程序,这是 Free Pascal 最强大的应用场景。
第十二章:推荐资源
- 官方文档:
- Free Pascal Programmer's Guide:最权威、最全面的参考手册。
- Lazarus Documentation:Lazarus 的官方文档。
- 在线教程与社区:
- Lazarus Wiki:包含大量教程、FAQ 和示例代码。
- The Delphi/Pascal Programming Forum:一个非常活跃的社区,很多问题在这里都能得到解答(尽管是 Delphi 社区,但大部分内容适用于 FPC/Lazarus)。
- [YouTube**:搜索 "Free Pascal Lazarus Tutorial" 或 "Object Pascal Tutorial",有大量视频教程可供选择。
- 书籍:
- 《Mastering Delphi》:虽然是关于 Delphi 的,但对于理解 Pascal 的 OOP 非常有帮助。
- 可以在 Amazon 等平台搜索 "Free Pascal" 或 "Object Pascal" 相关书籍。
祝你学习愉快,早日成为 Pascal 编程高手!
