Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Bedingte Kompilierung gilt nur innerhalb der Unit?


lincore - Fr 09.01.09 19:36
Titel: Bedingte Kompilierung gilt nur innerhalb der Unit?
Moin,

ich spiele gerade ein bisschen mit bedingter Kompilierung herum und habe festgestellt, dass per Compilerdirektiven definierte Symbole anscheinend nur in der Unit gelten, in der sie deklariert wurden. So habe ich in Global.pas folgendes stehen:

Delphi-Quelltext
1:
{$DEFINE ALLOC_CONSOLE}                    

In Main.pas wiederum steht:

Delphi-Quelltext
1:
{$IFDEF ALLOC_CONSOLE}allocConsole;{$ENDIF}                    

Beim Start des Programms sehe ich kein zweites Konsolenfenster. Wenn ich ALLOC_CONSOLE hingegen in Main.pas selbst definiere, läuft alles wie gewünscht.

Mal davon abgesehen, dass bedingte Kompilierung in meinem Fall wohl absolut überdimensioniert ist:
Ist es tatsächlich so gewollt, dass diese Symbole nur in der Unit bekannt sind, in der sie deklariert wurden? Oder habe ich in Folge meines übermäßigen nachmittaglichen Kaffeekonsums einen Fehler eingebaut? Im ersten Fall scheint die Delphi Hilfe dies jedenfalls als allgemein bekannt vorauszusetzen, denn dieses Verhalten wird dort (afaik) mit keiner Silbe erwähnt.

Nachdenkliche Grüße,
lincore


MSCH - Fr 09.01.09 19:46

Symbole sind im dem Scope gültig, in dem sie definiert werden. Ansonsten musst du sie global definieren,
entweder in einer Datei die via {$I ...} in jede Unit eingbunden wird, oder imho per Compiler- Direktive in dem
Projekt unter Projectoptionen-Delphi Compiler - Bedingungen.

grez
msch


lincore - Fr 09.01.09 20:11

Okay MSCH, danke für die Aufklärung!

lincore