Nee, wozu?
{$IF Defined(FPC_VERSION)}
fängt ja ab, falls es das nicht gibt. (in einem uralten FPC)
Und bereits
{$IFDEF FPC}
passt auf, dass es im
Delphi garnicht ausgeführt wird.
Klingt aber fast so, als sei FPC_VERSION bei dir keine "echte" Konstante, aber wenn sie vom Compilier kommt, dann sollte es doch eigentlich passen.
also z.B.
const FPC_VERSION: Integer = 123;
Außerdem wird deine Prüfung garnicht funktionieren, da FPC_VERSION ein DECLARE und kein DEFINE ist uns somit wird IFDEF/IFNDEF dennoch anschlagen, selbst wenn es existiert.
Und auch das
{$IF Defined(FPC_VERSION)}
entspricht dem
{$IFDEF FPC_VERSION}
.
Delphi-Quellcode:
{$IFNDEF FPC}
const FPC_VERSION = 0;
{$IFEND}
oder besser das, was man eigentlich machen will (wenn nicht existiert, dann erstellen)
{$IF not Declared(FPC_VERSION)}
const FPC_VERSION = 0;
{$IFEND}
also
Delphi-Quellcode:
{$IFDEF FPC}
{$IF Declared(FPC_VERSION)} <<<<<<<<<<<<<<<<<<<<<< Declared, nicht Defined
{$IF FPC_VERSION >= 3}
{$DEFINE UNICODE}
{$IFEND FPC_VERSION}
{$IFEND FPC_VERSION}
{$ENDIF FPC}
{$IF Defined(FPC) and Declared(FPC_VERSION) and (FPC_VERSION >= 3)}
{$DEFINE UNICODE}
{$IFEND}
und da FPC_VERSION eh immer nur im FPC existiert (außer jemand macht sowas Böses, wie der Rolf), wäre der erste Teil implizit im Zweiten mit enthalten
{$IF Declared(FPC_VERSION) and (FPC_VERSION >= 3)}
{$DEFINE UNICODE}
{$IFEND}
ConditionalExpressions {$IF} sollten ja inzwischen alle Compiler seit Jahrzehnten können.