gpt4 book ai didi

delphi - FPC没有为64位处理器定义CPU386符号

转载 作者:行者123 更新时间:2023-12-02 10:44:31 26 4
gpt4 key购买 nike

下一个应用

program Project1;

{$IFDEF FPC}
{$mode delphi}
{$ENDIF}

begin
{$IFDEF CPU386}
Writeln('CPU386');
{$ENDIF}
Readln;
end.

在我的系统(Win7 64 位,CPU intel core i3)上,Delphi(XE) 和 FPC(2.6.2) 产生不同的输出。 Delphi 输出 CPU386 字符串,FPC 则不输出。

似乎 FPC 没有为我的 CPU 定义 CPU386 符号(请参阅 the list of FPC defines );它定义了 CPUX86_64 符号。

到目前为止,我正在使用下一个解决方法:

{$IFDEF FPC}
{$IFNDEF CPU386}
{$IFDEF CPUX86_64}
{$DEFINE CPU386}
{$ENDIF}
{$ENDIF}
{$ENDIF}

最佳答案

这正如预期的那样。 CPU386 条件适用于 32 位 Intel x86 目标。 CPUX86_64 条件适用于 64 位 Intel x64 目标。

当您使用 64 位 Delphi 编译器编译程序时,它也不会产生任何输出。因为 CPU386 条件也没有为 64 位 Delphi 编译器定义。

这样做是不正确的:

{$IFDEF CPUX86_64}
{$DEFINE CPU386}
{$ENDIF}

CPU386 表示目标架构是 32 位 Intel x86。而 64 位 Intel x64 则不是。

预定义条件的 Delphi 文档位于:http://docwiki.embarcadero.com/RADStudio/en/Conditional_compilation_(Delphi)#Predefined_Conditionals

它在 CPU 标题下列出了以下内容:

  • CPUARM
  • CPU386
  • CPUX86
  • CPUX64

对于 32 位 x86 目标,Delphi 和 FPC 都定义了 CPU386。对于 64 位 x64 目标,Delphi 定义了 CPUX64,FPC 定义了 CPUX86_64

如果您需要在共享源代码中使用通用条件,那么您可能需要做一些额外的工作。假设您选择了 CPUX86CPUX64。然后你会包括这个:

{$IFDEF FPC}
{$IFNDEF CPU386}
{$DEFINE CPUX86}
{$ENDIF}
{$IFNDEF CPUX86_64}
{$DEFINE CPUX64}
{$ENDIF}
{$ENDIF}

关于delphi - FPC没有为64位处理器定义CPU386符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26481400/

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