[gelöst] Wieso meckert der Compiler hier?
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1823
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
[gelöst] Wieso meckert der Compiler hier?
Zuletzt geändert von fliegermichl am Mo 31. Aug 2026, 15:08, insgesamt 1-mal geändert.
- Zvoni
- Beiträge: 724
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: Wieso meckert der Compiler hier?
Hast du mal Zeile 13 auskommentiert?
Mich überrascht eher, dass der Compiler durch die Zeilen geht, die eigentlich ignoriert werden sollen.
EDIT: Gerade getestet. Meckert auch bei mir.
Es ist definitiv das {$elseif xxxx}
Muss also irgendwas mit dem Parser sein.
Weil das hier funktioniert
EDIT2: Hab was gefunden: https://forum.lazarus.freepascal.org/in ... ic=50056.0
Ich werd doof.....
{$elseif Defined(yyy)} funktioniert NUR, wenn das erste if mit {$IF Defined(xxx)} beginnt.
{$ifdef xxx} gefolgt von einem {$elseif Defined(yyy)} funktioniert nicht
Das hier kompiliert
Mich überrascht eher, dass der Compiler durch die Zeilen geht, die eigentlich ignoriert werden sollen.
EDIT: Gerade getestet. Meckert auch bei mir.
Es ist definitiv das {$elseif xxxx}
Muss also irgendwas mit dem Parser sein.
Weil das hier funktioniert
Code: Alles auswählen
//{$define STATICLINK}
{$ifndef STATICLINK}
{$ifdef WIN32}
const lib = 'libsodium.dll';
{$else}
{$if defined(WIN64)}
const lib = 'libsodium64.dll';
{$else}
{$fatal dynamic lib for this target not defined}
{$endif}
{$endif}
{$else}
{$ifdef WIN32}
{$linklib libsodium.a}
{$linklib libkernel32.a}
{$linklib libmsvcrt.a}
{$linklib libgcc.a}
{$linklib libadvapi32.a}
{$else}
{$if defined(WIN64)}
{$linklib libsodium.a}
{$linklib libkernel32.a}
{$linklib libmsvcrt.a}
{$linklib libgcc.a}
{$linklib libadvapi32.a}
{$else}
{$fatal static libs for this target missing}
{$endif}
{$endif}
{$endif} Ich werd doof.....
{$elseif Defined(yyy)} funktioniert NUR, wenn das erste if mit {$IF Defined(xxx)} beginnt.
{$ifdef xxx} gefolgt von einem {$elseif Defined(yyy)} funktioniert nicht
Das hier kompiliert
Code: Alles auswählen
//{$define STATICLINK}
{$ifndef STATICLINK}
{$IF Defined(WIN32)}
const lib = 'libsodium.dll';
{$ELSEIF defined(WIN64)}
const lib = 'libsodium64.dll';
{$ELSE}
{$fatal dynamic lib for this target not defined}
{$ENDIF}
{$else}
{$if defined(WIN32)}
{$linklib libsodium.a}
{$linklib libkernel32.a}
{$linklib libmsvcrt.a}
{$linklib libgcc.a}
{$linklib libadvapi32.a}
{$elseif defined(WIN64)}
{$linklib libsodium.a}
{$linklib libkernel32.a}
{$linklib libmsvcrt.a}
{$linklib libgcc.a}
{$linklib libadvapi32.a}
{$else}
{$fatal static libs for this target missing}
{$endif}
{$endif} Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1823
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Wieso meckert der Compiler hier?
Danke,
ich habe es jetzt auf die Variante {$if defined(win32)} umgestellt. Da klappt es.
ich habe es jetzt auf die Variante {$if defined(win32)} umgestellt. Da klappt es.
- af0815
- Lazarusforum e. V.
- Beiträge: 7429
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: [gelöst] Wieso meckert der Compiler hier?
Das {$IFDEF xxx } ist laut Usermanual hauptsächlich für das Konfigurationsfile da und es wird nur bis {$ELSE} oder {$ENDIF} gesucht, also nichts mit anderen Kayworten . Hier im Programmersguide https://docs.freepascal.org/docs-html/c ... gsu31.html wird hin und wieder darauf hingewiesen das man {$IF xx} nehmen soll, dann erst funktioniert alles besser, weil das scheinbar mehr Syntax kann. Aber in der Beschreibung auch von denselben Einschränkungen von {$ELSE} oder {$ENDIF} gesprochen wird, aber nicht von {$ELSEIF}.
Interessant, auch im Kapitel 2.4.1 wird nichts von der Syntax mit {$ELSEIF} gesprochen. Da ist die Doku schon ein wenig komisch.
Ok, habe ich auch etwas dazugelernt.
Interessant, auch im Kapitel 2.4.1 wird nichts von der Syntax mit {$ELSEIF} gesprochen. Da ist die Doku schon ein wenig komisch.
Ok, habe ich auch etwas dazugelernt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1823
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: [gelöst] Wieso meckert der Compiler hier?
Wenn ich so darüber nachdenke, ist es ja auch logisch.
Code: Alles auswählen
{$ifdef win32} // kann ja nur true oder false geben, also macht ein $elseif an der Stelle keinen Sinn. Nur das {$else}
Re: [gelöst] Wieso meckert der Compiler hier?
Bleibt die Frage, unter welcher FPC Version/Einstellung die fpc-libsodium Demo jemals kompiliert hat.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1823
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: [gelöst] Wieso meckert der Compiler hier?
Das steht nirgends. Ich hab mal einen Issue aufgemacht.theo hat geschrieben: Mo 31. Aug 2026, 17:31 Bleibt die Frage, unter welcher FPC Version/Einstellung die fpc-libsodium Demo jemals kompiliert hat.
- af0815
- Lazarusforum e. V.
- Beiträge: 7429
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: [gelöst] Wieso meckert der Compiler hier?
Fibonacci ist IMHO auch im englischen Forum aktiv.fliegermichl hat geschrieben: Mo 31. Aug 2026, 18:04 Das steht nirgends. Ich hab mal einen Issue aufgemacht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
PascalDragon
- Beiträge: 1048
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Wieso meckert der Compiler hier?
Was meinst du wie der Compiler das $ENDIF findet? Zumindest die Compiler Expressions müssen syntaktisch korrekt sein (Delphi meckert bei Problemen dort auf ähnliche Art).Zvoni hat geschrieben: Mo 31. Aug 2026, 12:51 Mich überrascht eher, dass der Compiler durch die Zeilen geht, die eigentlich ignoriert werden sollen.
FPC Compiler Entwickler
- Zvoni
- Beiträge: 724
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: Wieso meckert der Compiler hier?
AHHHH......OK, ergibt natürlich Sinn.PascalDragon hat geschrieben: Mo 31. Aug 2026, 22:32Was meinst du wie der Compiler das $ENDIF findet? Zumindest die Compiler Expressions müssen syntaktisch korrekt sein (Delphi meckert bei Problemen dort auf ähnliche Art).Zvoni hat geschrieben: Mo 31. Aug 2026, 12:51 Mich überrascht eher, dass der Compiler durch die Zeilen geht, die eigentlich ignoriert werden sollen.
Noch viel zu früh am morgen......
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.