Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   CompilerSwitch ... noch'n Bug (https://www.delphipraxis.net/178258-compilerswitch-nochn-bug.html)

himitsu 27. Dez 2013 19:41

CompilerSwitch ... noch'n Bug
 
Ich hatte mich grade gewundert, warum ein Code garnicht funktioniert.

Und beim Debuggen dachte ich erst, ich seh nicht richtig. (die fehlenden blauen Punkte hielt ich erst für einen anderen Bug)
Zitat:

Delphi-Quellcode:
{$IFDEF UsePerformanceCounter}
  CodeA;
{$ESLE}
  CodeB;
{$ENDIF}

Ja, hier (XE3) wird keiner der Codes ausgeführt und es gibt auch keinerlei Fehlermeldung vom Compiler. :wall:


Sagt jetzt bitte nicht, daß dieser Bug schon lange und immernoch vorhanden ist.





Es ist ja schon "krank", daß die Trottel IFEND und ENDIF zusammengeschmissen haben (ohne es dem Error-Insigt zu sagen).
Aber hier nichtmal einen fehler zu werfen, also echt Mal.

jaenicke 27. Dez 2013 19:53

AW: CompilerSwitch ... noch'n Bug
 
Wenn das IFDEF nicht erfüllt wird, wird der Code dazwischen nicht ausgeführt. Dass das ELSE falsch geschrieben ist, stört den Compiler daher auch nicht. Und ist es erfüllt, wird es auch nicht bemerkt, wenn der Code vorher schon ein Problem macht.

Wo siehst du hier das Problem?

Und wegen IFEND und ENDIF:
Das ist bei XE5 für Error Insight kein Problem soweit ich das sehe.

Furtbichler 27. Dez 2013 20:27

AW: CompilerSwitch ... noch'n Bug
 
Zitat:

Zitat von jaenicke (Beitrag 1241233)
Dass das ELSE falsch geschrieben ist, stört den Compiler daher auch nicht.

Das ist ja grad der Bug. Wenn Compilerdirektiven durch '{$' eingeleitet werden, dann ist das eine Direktive. und '$ESLE' ist eine unbekannte Direktive.

jaenicke 27. Dez 2013 22:24

AW: CompilerSwitch ... noch'n Bug
 
Es ist aber im IFDEF drin, das nicht erfüllt ist. Dementsprechend interessiert den Compiler auch nur ein Ende. Es wäre umgekehrt ein Bug, wenn etwas beachtet würde obwohl das IFDEF nicht erfüllt ist.

Wird das IFDEF erfüllt, wird es ja auch korrekt als falsche Direktive erkannt.

Würde das nicht so funktionieren, könnte man auch nicht neue Direktiven vor alten Delphiversionen mit IFDEF verstecken. Das wäre daher ein gravierendes Problem.

Furtbichler 27. Dez 2013 22:58

AW: CompilerSwitch ... noch'n Bug
 
Zitat:

Zitat von jaenicke (Beitrag 1241241)
Es ist aber im IFDEF drin, das nicht erfüllt ist...

Aber nach dem ELSE muss er doch suchen, oder? Also muss er sich doch eh jede Zeile anschauen. Der Präprozessor ist einfach nur zu gnädig, und das ist blöd. Verstehe nicht, weshalb die keinen anständigen Tokenizer (bezüglich der Compilerdirektiven) dort eingebaut haben.

himitsu 27. Dez 2013 23:17

AW: CompilerSwitch ... noch'n Bug
 
Och, hätte wenigstens eine Warnung über unbekannte Direktive erwartet,
aber jetzt wo du es sagst ... joar, hast schon Recht.

Dennoch blöd, daß der Rechtschreibfehler nicht gleich auffällt, so wie beim normalen IF-THEN-ELSE.
War nett, daß ich bestimmt fast eine 1/4 Stunde versenkt hatte und bissl sauer reagierte, als mich der Fehler grade etwas generft hatte. :?



Und das mit dem IFEND ... gerade da gibt es das Problem.
Ich weiß nicht seit wann es "kaputt"-gemacht wurde.

Delphi-Quellcode:
{$IFDEF ConditionalExpressions}
  {$IF Irgendwas}
    ...
  {ENDIF}
{ENDIF}
Das funktioniert jetzt, aber früher nicht, also da wo das IFDEF fehlschlägt, dann mit dem ersten "falschen" ENDIF endet und beim nächsen ENDIF knallt, denn eigentlich hat es so auszusehen
Delphi-Quellcode:
{$IFDEF ConditionalExpressions}
  {$IF Irgendwas}
    ...
  {IFEND}
{ENDIF}
Zumindestens in XE3 und ich glaub auch noch in XE4 meckerte (unterstrich) noch das ErrorInsight den "Fehler" korrekt, auch wenn der Compiler es durchläßt.

jaenicke 28. Dez 2013 08:25

AW: CompilerSwitch ... noch'n Bug
 
Zitat:

Zitat von Furtbichler (Beitrag 1241244)
Aber nach dem ELSE muss er doch suchen, oder? Also muss er sich doch eh jede Zeile anschauen. Der Präprozessor ist einfach nur zu gnädig, und das ist blöd. Verstehe nicht, weshalb die keinen anständigen Tokenizer (bezüglich der Compilerdirektiven) dort eingebaut haben.

Der erkennt das ja, das ist ja gar nicht das Problem. Das Problem ist, dass du diese Warnungen dann für alle unbekannten Direktiven zukünftiger Delphiversionen bekommen würdest, wenn du mit einer älteren Delphiversion kompilierst, obwohl außen herum ein IFDEF ist und diese Direktiven also eigentlich außen vor bleiben sollen.

Das Problem in diesem Fall ist mir schon klar, aber trotzdem ist es so einfach nicht lösbar...

Furtbichler 28. Dez 2013 10:30

AW: CompilerSwitch ... noch'n Bug
 
Zitat:

Zitat von jaenicke (Beitrag 1241255)
Das Problem ist, dass du diese Warnungen dann für alle unbekannten Direktiven zukünftiger Delphiversionen bekommen würdest, wenn du mit einer älteren Delphiversion kompilierst, obwohl außen herum ein IFDEF ist und diese Direktiven also eigentlich außen vor bleiben sollen.

Hm... grffnzl. Ok. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz