Delphi Can';不内联函数吗?

Delphi Can';不内联函数吗?,delphi,inline,Delphi,Inline,我声明了几个函数只是为了可读性,我想检查编译器是否在内联它们。根据我的计算,我可以将它们标记为inline,如果它们没有内联,我会得到一个提示,但是,当我尝试这样做时,我会得到以下错误: [dcc32 Error] MyClass.pas(266): E1030 Invalid compiler directive: 'INLINE' 所以我尝试了一个简单的函数: procedure TMyClass.Swap(var a, b : Integer); inline; var c : In

我声明了几个函数只是为了可读性,我想检查编译器是否在内联它们。根据我的计算,我可以将它们标记为
inline
,如果它们没有内联,我会得到一个提示,但是,当我尝试这样做时,我会得到以下错误:

[dcc32 Error] MyClass.pas(266): E1030 Invalid compiler directive: 'INLINE'
所以我尝试了一个简单的函数:

procedure TMyClass.Swap(var a, b : Integer); inline;
var
  c : Integer;
begin
  c := a;
  a := b;
  b := c;
end;
唉,我也犯了同样的错误。根据默认值是
{$INLINE ON}
,所以我假设我只需要添加
INLINE。尽管如此,我还是试图声明
{$INLINE ON}
,但没有结果。我的Google fu让我失望了,所以我来了


我使用的是Delphi 10.1 Berlin。

您将它放在实现上,而不是声明上。将其放在实现上将适用于独立函数和过程,但不适用于类方法。这些必须在声明本身中定义为
inline

interface

type
  TMyClass = class(TObject)
  private
    procedure Swap(var a, b: integer); inline;
  end;

implementation 

procedure TMyClass.Swap(var a, b:integer);
begin
  //
end;

你应该只把这个指令放在方法声明上。@Jerry,我不知道它是什么意思。但事实上,这是一个答案。简而言之,这是一篇回答文章,但答案是:)我认为你不能在这里查阅文档。是的,您可以说您只能在类方法声明中使用该指令,而不能在其实现中使用该指令;请注意,
inline
指令可以应用于声明和定义。按照:“与其他指令一样,
inline
指令用于函数和过程声明和定义。”它们甚至提供了在声明和定义中都标记的示例函数definition@Remy,独立函数和过程可以在声明和实现时使用此指令。而不是类方法。类方法只能在声明时使用它(这是文档没有涉及的)。@RemyLebeau:当然,如果您愿意,您也可以在实现部分重复它,但声明时需要它,否则会引发编译器错误(正如海报所述,正如我刚刚在柏林测试的那样)。(无论如何,它没有太多功能,因为只要默认的
{$inline ON}
有效,编译器将在不使用关键字的情况下内联它认为可以内联的所有内容。)@Ken,使用
{$inline}
指令不会改变任何内容。在方法实现中,不能使用此指令。就是这样。@Ken,对不起,我误读了你的评论(或者从那时起就被修改了)。但是,我认为现在链接文档不是一个好方法,因为它只考虑独立的函数和过程,而不考虑方法。