使用math单元中的max和min函数时发现仅能支持长整形,如果使用了浮点型,则会收到形如
Error: Incompatible type for arg no. 2: Got “Single”, expected “LongInt”
的错误提示。
检查了math.pp的内容,发现此处的代码如下
{$ifdef FPC_HAS_TYPE_SINGLE}
function Min(a, b: Single): Single;inline; overload;
function Max(a, b: Single): Single;inline; overload;
{$endif FPC_HAS_TYPE_SINGLE}
{$ifdef FPC_HAS_TYPE_DOUBLE}
function Min(a, b: Double): Double;inline; overload;
function Max(a, b: Double): Double;inline; overload;
{$endif FPC_HAS_TYPE_DOUBLE}
{$ifdef FPC_HAS_TYPE_EXTENDED}
function Min(a, b: Extended): Extended;inline; overload;
function Max(a, b: Extended): Extended;inline; overload;
{$endif FPC_HAS_TYPE_EXTENDED}
其它形式的函数被放在三个条件编译处,再往上追溯,发现这三个定义被另一个条件约束
{$IFDEF FPDOC_MATH}
{$DEFINE FPC_HAS_TYPE_SINGLE}
{$DEFINE FPC_HAS_TYPE_DOUBLE}
{$DEFINE FPC_HAS_TYPE_EXTENDED}
{$DEFINE FPC_HAS_TYPE_COMP}
Type
Float = MaxFloatType;
{$ENDIF}
然而并不能直接在math.pp中通过增加
{$DEFINE FPDOC_MATH}
来开启这个开关。
尝试了在Project Option的Custom Options中设置-dFPDOC_MATH,无效。
发现了两个相关讨论
Right way to turn FPDOC_MATH on?
How to turn on FPC_HAS_TYPE_COMP
但是没有有效结果。