Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - IFDEF - Zwei Direktiven mit AND prüfen?
Ratchet - Fr 16.04.10 12:25
Titel: IFDEF - Zwei Direktiven mit AND prüfen?
Gibt es eine Möglichkeit zwei Direktiven zu prüfen wie es in einer richtigen If-Anweisung auch möglich ist?
Ich könnte natürlich die IFDEFs verschachteln, dann muss ich aber Code doppelt schreiben, was ich vermeiden möchte.
Martok - Fr 16.04.10 13:03
IFDEFs verschachteln ist die übliche Vorgehensweise. Findet sich quer durch die ganze VCL.
Sowas ist also völlig normal:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| {$IFDEF WIN32} {$IFDEF PUREPASCAL} {$ELSE} {$ENDIF} {$ENDIF} |
Ratchet - Fr 16.04.10 13:09
Schon klar, aber mir geht es darum doppelten Code zu vermeiden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| {$IFDEF VER130} {$IFDEF SOME_DEF} Funktion1; {$ELSE} Funktion2; {$ENDIF} {$ELSE} Funktion1; {$ENDIF} |
Ich will Funktion1 nur einmal im Code haben, denn in Wirklichkeit sind es mehrere Zeilen die gleich wären.
Gammatester - Fr 16.04.10 14:09
Sieh Dir mal die Onlinehilfe zur IG-Direktive
{$IF expression} an. Hier die Einleitung beim englischen Delphi 6:
| Zitat: |
IF directive
Type Conditional compilation
Syntax {$IF expression}
Remarks
Compiles the source code that follows it if expression is True. expression must conform to Object Pascal syntax and return a Boolean value; it may contain declared constants, constant expressions, and the functions Defined and Declared.
|
Damit sind da Konstrukte möglich wie:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| const a=3; b=2;
{$if defined(VER140) or (((a=1) and (b=1)) or (a>0))} {$else} bar; {$ifend} |
Ratchet - Fr 16.04.10 15:55
Kann es sein, dass dies mit Delphi 5 noch nicht möglich ist? Finde dazu nichts in der Hilfe und der Compiler verweigert die Arbeit ^^
EDIT: Unter Delphi 2006 habe ich nun was in der Hilfe gefunden, aber das bezieht sich auf C/C++/.NET...
BenBE - Fr 16.04.10 16:13
Nein, $IF kam erst mit Delphi 7 oder 2995 IIRC.
Gausi - Fr 16.04.10 16:23
Ich hab hier grade kein Delphi zur Hand, aber geht nicht sowas?
Delphi-Quelltext
1: 2: 3: 4: 5:
| {$IFDEF VER130} {$IFDEF SOME_DEF} {$DEFINE VER130_AND_SOME_DEF} {$ENDIF} {$ENDIF} |
Dann kannst du den Fall für Funktion1 über die neue Def behandeln, und du hast den Code nur einmal. Das machen afaik auch die Jedis so.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!