AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi Delphi und FPC compiler problem
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi und FPC compiler problem

Ein Thema von KodeZwerg · begonnen am 15. Aug 2022 · letzter Beitrag vom 15. Aug 2022
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

Delphi und FPC compiler problem

  Alt 15. Aug 2022, 10:44
Obwohl laut meiner direktive der compiler hier unter Nutzung von Delphi nicht reingehen sollte, meckert er.
(Turbo Delphi 2006 nutze ich um Ansi/Wide Unterstützung getrennt zu testen mit Delphi Rio)
Da ich nun auch Lazarus/FPC Unterstützen möchte, hab ich mir das hier zusammen gebastelt:
Delphi-Quellcode:
{$IFDEF FPC}
  {$IF Defined(FPC_VERSION)}
    {$IF FPC_VERSION >= 3}  // [Pascal Error] kz.inc(80): E2026 Constant expression expected
      {$DEFINE UNICODE}
    {$IFEND FPC_VERSION}
  {$IFEND FPC_VERSION}
{$ENDIF FPC}
Kann mir bitte jemand helfen
Gruß vom KodeZwerg

Geändert von KodeZwerg (15. Aug 2022 um 10:49 Uhr) Grund: Es betrifft generell Delphi
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Delphi und FPC compiler problem

  Alt 15. Aug 2022, 13:33
Das Problem ist, dass die Konstante FPC_VERSION in Delphi nicht existiert. Daher muss diese wohl zuvor bei Delphi bekannt gemacht werden. So würde es gehen:
Delphi-Quellcode:
{$IFNDEF FPC_VERSION}
  const FPC_VERSION = 0;
{$ENDIF}
{$IFDEF FPC}
  {$IF Defined(FPC_VERSION)}
    {$IF FPC_VERSION >= 3}  // [Pascal Error] kz.inc(80): E2026 Constant expression expected
      {$DEFINE UNICODE}
    {$IFEND FPC_VERSION}
  {$IFEND FPC_VERSION}
{$ENDIF FPC}

Geändert von Rolf Frei (15. Aug 2022 um 13:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Delphi und FPC compiler problem

  Alt 15. Aug 2022, 13:39
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.
$2B or not $2B

Geändert von himitsu (15. Aug 2022 um 13:52 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Delphi und FPC compiler problem

  Alt 15. Aug 2022, 13:47
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.
Das würde ich auch erwarten, aber teste es bitte selber. Delphi interessiert des IFDEF FPC garnicht und wertet auch alle darin enthaltenen IFDEF's, etc. aus. Das führt zu dem erwähnten Fehler. Mein Code funktioniert. Ob das ein Bug ist oder nicht, weiss ich aber nicht so recht.

Geändert von Rolf Frei (15. Aug 2022 um 13:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi und FPC compiler problem

  Alt 15. Aug 2022, 13:57
Das würde aber bedeuten, dass FPC im Delphi irgendwo definiert wäre, was es aber eigentlich nicht ist.

Zitat:
Delphi-Quellcode:
{$IFDEF FPC}
  {$IF Defined(FPC_VERSION)}
Also eigentlich sollte es im Delphi garnicht an den Beiden vorbei kommen.


Und wie gesagt ... Defined vs. Declared. (man könnte aber Beides machen, also etwas deklarieren und etwas Gleichnamiges definieren)
Konstanten/Variablen/Klassen/Typen/Funktionen sind Deklariert, aber nicht Definiert.
$2B or not $2B

Geändert von himitsu (15. Aug 2022 um 13:59 Uhr)
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#6

AW: Delphi und FPC compiler problem

  Alt 15. Aug 2022, 13:59
Wenn ich mich richtig erinnere, verwendest du mORMot. Dann könnte die mormot.defines.inc eine Option für dich sein.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#7

AW: Delphi und FPC compiler problem

  Alt 15. Aug 2022, 14:10
Das sieht schwer nach einem Bug aus und hat eine gewisse Ähnlichkeit mit RSP-37123.

Das Problem lässt sich bis mindestens Delphi 10 Seattle reproduzieren (simples Konsolenprogramm). Ältere Versionen habe ich gerade nicht zur Hand.

Mach doch bitte einen BugReport dazu auf.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Delphi und FPC compiler problem

  Alt 15. Aug 2022, 14:25
Delphi-Quellcode:
//nicht ausprobiert da ich eigentlich nichts erstellen wollte
{$IF not Declared(FPC_VERSION)}
  const FPC_VERSION = 0;
{$IFEND}

// funktioniert nicht, der selbe fehler bei prüfung auf >= 3
{$IFDEF FPC}
  {$IF Declared(FPC_VERSION)}  <<<<<<<<<<<<<<<<<<<<<< Declared, nicht Defined
    {$IF FPC_VERSION >= 3}
      {$DEFINE UNICODE}
    {$IFEND FPC_VERSION}
  {$IFEND FPC_VERSION}
{$ENDIF FPC}


// funktioniert
{$IF Defined(FPC) and Declared(FPC_VERSION) and (FPC_VERSION >= 3)}
  {$DEFINE UNICODE}
{$IFEND}

// funktioniert
{$IF Declared(FPC_VERSION) and (FPC_VERSION >= 3)}
  {$DEFINE UNICODE}
{$IFEND}
ich bin halt davon ausgegangen das mein "IF FPC THEN" ausreicht um Delphi da auszugrenzen.

Vielen Dank an euch allen!!

getestet mit Turbo Delphi 2006, Delphi Rio und FPC 3.x
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Delphi und FPC compiler problem

  Alt 15. Aug 2022, 14:27
Das ist ein reines Compilier/Parser Problem und nicht ein Compilat Problem. Allfälliger Code innerhalb des IFDEF FPC wird ncht in das Programm compiliert. Das ist alles richtig und macht er auch so. Mit meinem obigen Lösungsansatz kannst du nach dem IFDEF FPC Müll reinschreiben und alles compiliert wie es sollte. Der Müll wird wie erwartet ignoriert.

Der Compiler wertet aber alle {$...} Zeilen aus, auch solche die er garnicht müsste. Da dort nun aber eine Referenz auf eine Konstante gemacht wird (FPC_VERSION >= 3) weiss der Delphi Compiler nicht was er damit anfangen soll, da er kein FPC_VERSION kennt. Ob da nun Defined oder Declared steht, hat für diesen Fehler keinen Einfluss, da dieser Teil eh nicht ins Compilat kommt.

@Uwe Raabe
Hab es eben mit D7 getestet und auch da kommt der Fehler aus gleichen Gründen. Wenn man da im IF einen Vergleich macht muss die entsprechende Konstante vorhanden sein, sonst knallt es.

Wie gesagt ist das ein reines Parser Problem und der Compiler macht da alles wie er muss, achtet also nicht auf das Zeugs innerhlab der IFDEF FPC beim compilieren. Für mich schaut das nicht wirklich nach einem Bug aus, sondern ist vermutlich "As Designed".

Geändert von Rolf Frei (15. Aug 2022 um 14:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Delphi und FPC compiler problem

  Alt 15. Aug 2022, 14:38
Wenn ich mich richtig erinnere, verwendest du mORMot. Dann könnte die mormot.defines.inc eine Option für dich sein.

Bis bald...
Thomas
Das ist korrekt aber nicht in dieser Datei
Anfangs hatte ich die "Jedi.inc" verwendet aber die macht was ganz blödes unter FPC, da setzt die Datei ohne zu fragen einfach den {$MODE}, eher sub-optimal
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz