Sind bedingte Ausdrücke in Paketen gebrochen?

7

Betrachten Sie das folgende Snippet:

%Vor%

Es scheint absolut syntaktisch korrekt zu sein. Der Compiler drosselt ihn jedoch und meldet Constant expression expected . Was passiert hier wirklich?

Technisch: derzeit nur auf XE (15.0.3953.35171) getestet.

Natürlich sind auch Workaround-Vorschläge willkommen.

    
OnTheFly 29.11.2011, 03:58
quelle

3 Antworten

12

Ich habe das gleiche Problem in der Vergangenheit selbst mit Delphi 2007 gefunden. Als Workaround verwende ich eine inc-Datei mit den bedingten Definitionen und verwende dann {$IFDEF} anstelle von {$IF}

so etwas

%Vor%     
RRUZ 29.11.2011, 04:25
quelle
8

package Module unterscheiden sich von program und library Module. Sie enthalten keinen ausführbaren Code und Sie können nicht use units. Daher sind Symbole wie RTLVersion einfach nicht aus einer Paketdatei sichtbar. Ihre einzige Option ist die Verwendung von $IFDEF .

    
David Heffernan 29.11.2011 09:37
quelle
2

Ich bin überzeugt, was ich gerade gefunden habe. Berücksichtigen Sie Folgendes:

%Vor%

Es scheint also, dass der Compiler sich korrekt verhält, gibt aber eine ziemlich irreführende (wenn nicht falsche) Nachricht über das Symbol aus, das kein konstanter Ausdruck ist, während das fragliche Symbol tatsächlich undeclared ist!

    
OnTheFly 29.11.2011 05:08
quelle