modeswitch/zh CN

From Lazarus wiki
Jump to navigationJump to search

English (en) 中文(中国大陆) (zh_CN)
从 FPC 2.3.1 版本开始,`{$MODESWITCH}` 指令可以用来选择一些原本由 `{$MODE}` 指令所选择的特性。

它可以用来启用在当前模式下原本不可用的语言特性。例如,你可能正在使用 TP 模式编程,但想使用仅在 Delphi 模式下可用的 Out 参数。

`{$MODESWITCH}` 指令可以在不改变当前编译器模式的情况下启用或禁用单个模式特性。

这个开关是一个全局开关,可以在任何可以使用 `{$MODE}` 开关的地方使用。

语法如下:

{$MODESWITCH XXX}  // 启用特性 XXX
{$MODESWITCH XXX+}  // 启用特性 XXX(与上一个相同)
{$MODESWITCH XXX-}  // 禁用特性 XXX

特性 XXX 可以是以下之一:

特性 描述
ADVANCEDRECORDS 允许使用高级记录(即具有方法的记录)
ALLOWINLINE 允许内联过程
ANSISTRINGS 允许使用 ansistrings
AUTODEREF 对类型化指针进行自动(静默)解引用
CBLOCKS C 风格的代码块
CLASSICPROCVARS 使用经典的过程变量
CLASS 使用 Object Pascal 类
CVAR 允许使用 CVAR 关键字
DEFAULTPARAMETERS 允许使用默认参数值
DUPLICATELOCALS 允许类方法中的局部变量与类的属性具有相同的名称
EXCEPTIONS 允许使用异常
HINTDIRECTIVE 支持提示指令(如弃用、平台等)
INITFINAL 允许使用 Initialization 和 Finalization
ISOIO 符合 ISO Pascal 要求的输入/输出
ISOMOD 符合 ISO Pascal 要求的 mod 操作
ISOPROGRAMPARAS 符合 ISO Pascal 要求的程序参数
ISOUNARYMINUS 符合 ISO Pascal 要求的一元减号
MACPROCVARS 使用 mac 风格的过程变量
NESTEDCOMMENTS 允许使用嵌套注释
NESTEDPROCVARS 允许将局部过程分配给过程变量
NONLOCALGOTO 允许 "goto" 跳转到当前作用域之外的标签,例如位于外部全局作用域中的标签
OBJECTIVEC1 允许与 Objective C 版本 1 接口
OBJECTIVEC2 允许与 Objective C 版本 21 接口(注意:这里可能是个错误,应为版本 2)
OBJPAS 自动包含 ObjPas 单元
OUT 允许使用 out 参数类型
PCHARTOSTRING 允许自动将空终止字符串转换为字符串
POINTERTOPROCVAR 允许静默地将指针转换为过程变量
PROPERTIES 允许使用属性
REPEATFORWARD 实现和正向声明必须完全匹配
RESULT 为函数结果启用 Result 标识符
TYPEHELPERS 允许使用类型助手
UNICODESTRINGS string 默认是 unicode 字符串


因此,以下内容:

{$MODE TP}
{$MODESWITCH OUT}

将在TP模式下打开对输出参数类型的支持。它相当于

{$MODE TP}
{$MODESWITCH OUT+}


尽管选择了 FPC 模式,但在将过程变量赋值时省略 @ 地址运算符

{$mode FPC}
{$modeSwitch classicProcVars+} // 在 FPC 模式下,为过程变量赋值时省略 @ 地址运算符

官方文档

另请参阅