Lazarus是一种类Delphi的开发语言,其有着同Delphi基本一致的预处理指令集。由于其脱胎于C,且具有较好的跨平台GUI解决方案,所以在实际应用中具有很高的商业应用价值。
用途:多数编译型编程语言都支持预处理指令,它能让我们在跨平台,或特殊用途下根据预先定义的条件来编译全部或部分代码。比如项目处于开发中调试状态时,我们会向工程中添加一些特殊调试代码以发现BUG或监控运行状态,但在发布时又不想将这些代码包含其中,于是预处理指令可以帮上这个忙。又或者在跨平台开发中,我们需要根据发布的指定平台(比如windows或linux)来编译指令代码,这时使用预处理指令是非常有必要的,它能让我们在一个工程中分别编译出不同平台的应用程序来,而不需要每个平台编写一个工程。
指令格式:{$指令名称 操作符}
定义位置:预处理指令通常定义在单元的头部,条件编译指令通常用于代码块中。
说明:同Pascal语法一样,预处理指令也是不区分大小写的;预处理指令是编译器FPC内置的,使用时无需引用任何单元。预处理指令也可以嵌套使用!
示例:
{$Ifdef Windows}
{$ifdef Delphi_16UP}
uses VCL.Stdcall;
{$Endif}
{$Else}
uses Stdcall;
{$Endif}
一、基本指令集
| 指令名称 |
操作符 | 指令用途 | 代码示例 | 说明 |
| CodePage |
ANSI UTF-7 UTF-8 UTF-16 Unicode .... | 指定当前代码所使用的编码格式 | {$CodePage UTF-8} | 仅在Mode FPC模式下生效 |
| Define | 宏名称 | 自定义一个宏 | {$Define Debug} | 定义一个宏 |
| Undef | 宏名称 | 取消一个宏定义 | {$Undef Debug} | 取消宏定义 |
| Ifdef | 宏名称 | 判断某个宏是否被定义(是否存在宏)以决定是否执行代码 |
{$Ifdef Debug} A:=0; {$Else} A:=1; {$Endif} | 配对使用,同Else/EndIF一起使用 |
| else | -- | IfDef/IfNDef的条件分支语句 | 必须同IfDef /Ifndef一起使用 | |
| Endif | -- | 结束一个if指令 | 必须同IfDef /Ifndef一起使用 | |
| IfNdef | 宏名称 | 判断某个宏是否没有定义(是否不存在) |
{$IfNDef Debug} A:=0; {$Else} A:=1; {$Endif} | 与IfDef刚好相反 |
| Include / i | 文件名称 | 包含一个外部文件 | {$Include File.inc} | |
| if | 表达式 | 判断表达式 | {$if defined(FPC) or defined(TYPE)} | |
| Macro | On/Off | 宏指令开关 |
二、特殊预处理指令
| 指令名称 | 操作符 | 指令用途 | 代码示例 | 说明 |
| Mode |
Delphi FPC ObjFPC | 指明FPC使用何种语法格式 |
{$Mode Delphi}使用Delphi语法 {$Mode ObjFpc}使用FreePascal语法 | 通常用于跨编译器保持代码兼容而设置 |
| ModeSwitch |
Out/In ..... | 模式切换 | ||
| Inline | On/Off | 内联指令 | ||
| Warning | 字符串 | IDE相关 | {$Warning your Message} | 在编译时在IDE里显示一个警告信息,但编译会继续 |
| Error/STOP | 字符串 | IDE相关 | {$Error your error message} | 在编译时在IDE里显示一个错误信息,编译会停止 |
备注:IDE相关的特殊处理指令仅仅是在使用IDE时有效,对程序的最终结果没有影响
三、系统自带的宏(部分,不断增加中...)
| 分类 | 宏名称 | 环境依赖 | 说明 |
| 操作系统平台 |
Windows MSWindows | Windows平台 | 判断当前操作系统是否为Windows |
| Win32 | 32位Windows平台 | 判断当前操作系统是否为Win32平台 | |
| Win64 | 64位Windows平台 | ||
| Linux | Linux平台 | ||
| MacOS | MacOS | 苹果桌面系统 | |
| Android | Android安卓 | ||
| AIX | Unix平台 | IBM系统 | |
| Amiga | 一个早期的32位系统 | ||
| Unix | Unix平台 | ||
| 目标CPU平台 | X86_64 | ||
| X86 | |||
| i386 | |||
| i8086 | |||
| ARM | |||
| AArch64 | |||
| LoongArch64 | |||
|
Free Pascal Lazarus | Fpc_Version | FPC | 定义了FPC的版本号,整型 |
|
LCLGTK LCLGTK2 LCLGTK3 LCLGTK4 LCLGTK5 | GTK | 判断当前设置是否使用了GTK库 |
(未完待续...)
备注:由于资料过于缺乏,本文中少数来源于互联网,多数内容由作者翻看源代码同时亲自尝试得来,所以更新会比较慢,但如果发现内容有误请给我留言更正!
933

被折叠的 条评论
为什么被折叠?



