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

为什么默认函数参数在Free Pascal中被拒绝?,pascal,freepascal,Pascal,Freepascal,以下代码: 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. 获取指向函数

以下代码:

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.
获取指向函数声明中的=符号的编译器错误:

默认问题。pas(3,64)致命:语法错误,应为“”),但找到“=”

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

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

在免费的Pascal手册中,它显示了,语法似乎是“var name:type=value”,因此我不明白为什么会出现编译器错误。

正如我所看到的,您的问题在于函数声明,在
整数
之后的意外括号中:

错:

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

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

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

默认(FPC)方言与Turbo Pascal兼容,TP没有默认参数。 添加-S2或-Sd参数。(FPC模式有过载功能,可以用来模拟)

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

免费Pascal:(FPC、objfpc、TP、DELPHI、MACPAS)

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

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

Program UseDefaultParameters;

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

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

fpc -Mobjfpc my_program.pas

哦,谢谢。这可能是注释和取消注释的结果。但是我删除了它,错误是一样的。谢谢!这就成功了(我使用了{$modeobjfpc}代码标志。(清理了前面的快速注释)