Compiler switch

Gast #6869249
Lesenswert?

Hallo,

Angenommen ich habe eine Header Datei a.h
und darin eine Anweisung innerhalb eines
Compiler switch blockes.

Nun include ich diese a.h Datei in einer
r.c datei und setze davor in der r.c
Datei den Compiler switch auf true.

In dieser r.c Datei ist nun die im
Compiler switch Block stehende Anweisung aus
a.h bekannt.

Ich frage mich, welche Gültigkeit hat dieser
in r.c gesetzte Compiler switch.
Ist der nur lokal in r.c gültig und überall
sonst, wo ich a.h include nicht?

Danke für Erklärungen.
#6869251
Lesenswert?

Sven schrieb:
> Hallo,
>
> Angenommen ich habe eine Header Datei a.h
> und darin eine Anweisung innerhalb eines
> Compiler switch blockes.

Wie kann eine Header Datei eine Anweisung enthalten? Das sollte nicht so 
sein.
Wie soll diese Anweisung denn aussehen?

> Danke für Erklärungen.

Grundsätzlich tun Includes nichts anderes als den Inhalt der Datei an 
Stelle des Includes einzufügen.
Das sollte doch reichen um deine wirre Frage selbst zu beantworten.
Gast #6869253
Lesenswert?

Eine Definition, oder ein "Compilerswitch" in einer *.h Datei hat in 
jeder Übersetzungseinheit Geltung, in der es eingebunden wird.

Logisch, oder?
Welche Annahmen treiben dich dazu, was anderes überhaupt in Erwägung zu 
ziehen?
#6869271
Lesenswert?

Sven schrieb:
> Ich frage mich, welche Gültigkeit hat dieser
> in r.c gesetzte Compiler switch.
> Ist der nur lokal in r.c gültig und überall
> sonst, wo ich a.h include nicht?

Jede .c-Datei wird für sich übersetzt. Die hat an der Stelle keinerlei 
Verbindungen zu den anderen. Wenn du also in r.c einen Switch setzt, der 
in a.h irgendwas bewirkt, dann hat das keinerlei Auswirkungen auf andere 
.c-Files und deren Includes von a.h.
#6869431
Lesenswert?

Ein Define ist einfach nur eine Textersetzung. Alle Vorkommen nach der 
Definition werden durch den danach in der selben Zeile stehenden Text 
ersetzt.
Erfolgte keine Definition, wird der Text nicht ersetzt, d.h. der Text 
bleibt so stehen.
Eine Besonderheit ist, daß man einem Define Argumente übergeben kann, 
die dann in den ersetzten Text kopiert werden.
Zeilenkommentare "//" hinter einem Define sind zulässig, sie werden 
nicht mit ersetzt. Ein Define kann also nicht den Rest einer Zeile 
auskommentieren. Will man etwas bedingt auskommentieren, kann man es als 
Argument übergeben, welches nicht benutzt wird.
Gast #6869479
Lesenswert?

Sven schrieb:
> Ich frage mich, welche Gültigkeit hat dieser
> in r.c gesetzte Compiler switch.

Includen ist Includen - also werden die Befehle nacheinander ausgeführt 
und der Befehl in a.h überschreibt den vorherigen Befehl in r.c - was 
denn sonst?

Wäre der Compiler intelligent würde er den Kopf schütteln über solchen 
Quatsch.

Georg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren