下一个应用
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
。
如果您需要在共享源代码中使用通用条件,那么您可能需要做一些额外的工作。假设您选择了 CPUX86
和 CPUX64
。然后你会包括这个:
{$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/