为什么默认函数参数在Free Pascal中被拒绝?

问题描述 投票:2回答:3

以下代码:

program Default_Issue;

function SomeFunction(var myVar : integer; 
   defaulted : boolean = true) : integer;
begin
   writeln('Inside SomeFunction');
   SomeFunction := 0
end;

var 
   i :  integer;

begin
   SomeFunction(i,true);
end.

获取指向函数声明中=符号的编译器错误:

Default_Issue.pas(3,64)致命:语法错误,“)”预期但找到“=”

如果函数声明行删除了默认参数值,程序将编译:

function SomeFunction(var myVar : integer; 
     defaulted : boolean) : integer; 

在Free Pascal手册中,它显示了default parameters as an option for value parameters,语法似乎是“var-name:type = value”,所以我不明白为什么我得到编译器错误。

pascal freepascal
3个回答
3
投票

功能分为语言模式。默认参数是delphi功能,其中一些仅在objfpc和Delphi方言中启用。

默认(FPC)方言与Turbo Pascal兼容,TP没有默认参数。添加-S2或-Sd参数。 (虽然FPC模式有超载,可以用来模仿它)

有时会出现混乱,因为Lazarus通过传递额外的参数来默认为objfpc模式。


1
投票

正如我所看到的,你的问题出在函数声明中,integer之后的意外括号:

错误:

function SomeFunction(var myVar : integer; defaulted : boolean = true) : integer )

对:

function SomeFunction(var myVar : integer; defaulted : boolean = true) : integer;

1
投票

免费Pascal has five compiler modes :( FPC,OBJFPC,TP,DELPHI,MACPAS)。

默认编译器模式是FPC。 FPC模式不支持默认功能/过程参数。要使用它们,您必须将编译器模式更改为支持默认函数/过程参数的模式。这可以在源代码或命令行中完成。 OBJFPC模式(扩展的Free Pascal模式,为您提供所有Free Pascal功能)以及DELPHI模式(旨在尽可能多的Delphi兼容性)支持默认参数。

要在源代码中更改编译器模式,请使用{$ mode xxxx}编译器指令:

Program UseDefaultParameters;

{$mode OBJFPC}

编写Lazarus IDE的人必须认为这应该是默认模式,因为每当您要求它创建新的时,它们会自动添加此源代码编译模式(单元,应用程序,程序,控制台应用程序,库,InstantFPC程序,FPCUnit控制台)测试应用程序,FCPUnit测试应用程序)文件。 Lazarus IDE创建一个没有设置OBJFPC编译器模式的文件的唯一时间是它创建一个新的简单程序。

要在命令行上更改编译器模式,请使用-M编译器模式开关:

fpc -Mobjfpc my_program.pas
© www.soinside.com 2019 - 2024. All rights reserved.