Difference between revisions of "modeswitch/zh CN"
From Free Pascal wiki
Jump to navigationJump to search (Hieroly moved page modeswitch/zh CN to modeswitch over redirect) Tag: New redirect |
|||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | # | + | {{Main Page}} |
+ | 从 FPC 2.3.1 版本开始,`'''{$MODESWITCH}'''` 指令可以用来选择一些原本由 `'''{$MODE}'''` 指令所选择的特性。 | ||
+ | |||
+ | 它可以用来启用在当前模式下原本不可用的语言特性。例如,你可能正在使用 TP 模式编程,但想使用仅在 Delphi 模式下可用的 Out 参数。 | ||
+ | |||
+ | `'''{$MODESWITCH}'''` 指令可以在不改变当前编译器模式的情况下启用或禁用单个模式特性。 | ||
+ | |||
+ | 这个开关是一个全局开关,可以在任何可以使用 `'''{$MODE}'''` 开关的地方使用。 | ||
+ | |||
+ | 语法如下: | ||
+ | |||
+ | <syntaxhighlight lang="pascal"> | ||
+ | {$MODESWITCH XXX} // 启用特性 XXX | ||
+ | {$MODESWITCH XXX+} // 启用特性 XXX(与上一个相同) | ||
+ | {$MODESWITCH XXX-} // 禁用特性 XXX | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 特性 XXX 可以是以下之一: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | !特性 !! 描述 | ||
+ | |- | ||
+ | |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 字符串 | ||
+ | |} | ||
+ | |||
+ | |||
+ | 因此,以下内容: | ||
+ | <syntaxhighlight lang="pascal"> | ||
+ | {$MODE TP} | ||
+ | {$MODESWITCH OUT} | ||
+ | </syntaxhighlight> | ||
+ | 将在TP模式下打开对输出参数类型的支持。它相当于 | ||
+ | <syntaxhighlight lang="pascal"> | ||
+ | {$MODE TP} | ||
+ | {$MODESWITCH OUT+} | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | 尽管选择了 FPC 模式,但在将过程变量赋值时省略 @ 地址运算符 | ||
+ | <syntaxhighlight lang="pascal"> | ||
+ | {$mode FPC} | ||
+ | {$modeSwitch classicProcVars+} // 在 FPC 模式下,为过程变量赋值时省略 @ 地址运算符 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == 官方文档 == | ||
+ | * [https://www.freepascal.org/docs-html/3.2.0/prog/progsu106.html#x114-1150001.3.22 $modeswitch] (外部链接) | ||
+ | |||
+ | == 另请参阅 == | ||
+ | |||
+ | * [[Compiler_Mode]] | ||
+ | * [[modeswitches]] | ||
+ | * [[modeswitch]] | ||
+ | * [[modeswitch/zh-cn]] | ||
+ | |||
+ | [[Category:FPC/zh_CN]] | ||
+ | [[Category:Modes]] | ||
+ | [[Category:modeswitch]] |
Latest revision as of 16:50, 3 May 2024
│
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 模式下,为过程变量赋值时省略 @ 地址运算符
官方文档
- $modeswitch (外部链接)