gpt4 book ai didi

将定义从 C 转换为 Delphi

转载 作者:太空宇宙 更新时间:2023-11-04 05:10:50 25 4
gpt4 key购买 nike

我正在将开源应用程序从 C 语言转换为 Delphi,但我在转换这些行时遇到了问题:

#define IS_IN_SEARCH(mb, offset) (mb->searchmask[(offset)/8] & (1<<((offset)%8)))
#define REMOVE_FROM_SEARCH(mb, offset) mb->searchmask[(offset)/8] &= ~(1<<((offset)%8));

我想唯一要做的就是创建一个函数,但不知道其余的..

我不知道如何将它转换为 Delphi。

谁能帮帮我?

谢谢

最佳答案

首先创建双参数函数。 (你知道它应该是两个参数,因为宏有两个参数,宏的主体除了参数之外不引用任何其他标识符。

function Is_In_Search(mb: X; offset: Y): Z;
function Remove_From_Search(mb: X; offset: Y): W;

此外,如果您希望内联代码,即让编译器将上述两个函数中声明的生成代码放置在每个调用点,您可以将内联指令添加到声明中,如下所示:

function Is_In_Search(mb: X; offset: Y): Z; *inline;*
function Remove_From_Search(mb: X; offset: Y): W; *inline;*

接下来,弄清楚这些类型应该是什么。为此,请查看参数和宏的使用方式。

  • 我们可以猜测 offset 可能是一个整数,因为宏在其上使用了模运算符,所以将 Y 替换为 Integer函数声明。
  • 我们无法仅从定义中判断mb 应该是什么,但是您拥有其余代码,因此您可以查看使用宏的地方。找到第一个实际参数的类型,然后将 X 替换为该类型。它可能是指向某种结构类型的指针,例如记录或类。
  • 第一个函数的返回类型是表达式的类型。这可能是一个整数,但根据函数的名称,它实际上是一个 bool 类型。任何非零整数都被认为是真实的。将 Z 替换为 Boolean

    第二个宏的结果可能也是一个整数,但它的名称和语法表明它的结果总是被忽略,所以你可以去掉 W 并将第二个函数变成一个过程.

最后,填写函数体。将 C 语法转换为 Delphi,您将得到:

function Is_In_Search(mb: X; offset: Integer): Boolean;
begin
Result := 0 <> (mb.searchmask[offset div 8] and (1 shl (offset mod 8)));
end;

procedure Remove_From_Search(mb: X; offset: Integer);
begin
mb.searchmask[offset div 8] := mb.searchmask[offset div 8] and not (1 shl (offset mod 8));
end;

关于将定义从 C 转换为 Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9986506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com