Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Unterschied zwischen $ELSEIF und $ELSEIF DEFINED() (https://www.delphipraxis.net/209468-unterschied-zwischen-%24elseif-und-%24elseif-defined.html)

KHJ 11. Dez 2021 12:10

Delphi-Version: 11 Alexandria

Unterschied zwischen $ELSEIF und $ELSEIF DEFINED()
 
Während {$IFDEF WIN32} und {$IF DEFINED(WIN32)} bei einer Plattform WIN32 immer erkannt werden, wird {$ELSEIF WIN64} bei einer Plattform WIN64 nicht erkannt, {$ELSEIF DEFINED(WIN64)} aber schon.
Delphi-Quellcode:
{$IFDEF WIN32}
  Label5.Caption := 'Label 5 $IFDEF WIN32';
{$ELSEIF WIN64}
  Label5.Caption := 'Label 5 $ELSEIF WIN64';
{$ELSE }
  Label5.Caption := 'Label 5 $ELSE von IFDEF ELSEIF ELSE';
{$ENDIF}
{$IF DEFINED(WIN32)}
  Label6.Caption := 'Label 6 $IF DEFINED(WIN32)';
{$ELSEIF DEFINED(WIN64)}
  Label6.Caption := 'Label 6 $ELSEIF DEFINED(WIN64)';
{$ELSE }
  Label6.Caption := 'Label 6 $ELSE von IF DEFINED ELSEIF DEFINED';
{$ENDIF}
Worin ist der Unterschied zwischen {$ELSEIF WIN64} und {$ELSEIF DEFINED(WIN64)}?

himitsu 11. Dez 2021 12:24

AW: Unterschied zwischen $ELSEIF und $ELSEIF DEFINED()
 
$IFDEF und $IFNDEF kennen ausschließlich $ELSE.

$ELSEIF gehört zum $IF



Ja, man kann $ELSEIF auch beim $IFDEF einschmuggeln, aber es bleibt dennoch ein ConditionalDefine und kennt somit keine direkte Angabe vom $DEFINE.

Aber das funktioniert auch erst, seitdem die eigentlich getrennten Bedingungen vermischt wurden, so wie heutzutage auch $ENDIF und $IFEND nahezu gleichwertig sind, obwohl sie es anfangs absichtlich nicht waren, um vor "alten" Compilern, die noch keine ConditionalDefines kennen, davor verstecken zu können.



Also per se ist es eigentlich ein Bug, dass $ELSEIF im $IFDEF geht,
aber zum Glück wird Diesen hoffentlich niemand reparieren. :stupid:

peterbelow 11. Dez 2021 23:35

AW: Unterschied zwischen $ELSEIF und $ELSEIF DEFINED()
 
Zitat:

Zitat von KHJ (Beitrag 1498924)

Worin ist der Unterschied zwischen {$ELSEIF WIN64} und {$ELSEIF DEFINED(WIN64)}?

Ziemlich einfach: nach $ELSEIF wird ein boolscher Ausdruck erwartet. WIN64 ist keiner, DEFINED(WIN64) schon.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 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 by Thomas Breitkreuz