Forum: Mikrocontroller und Digitale Elektronik Compiler switch


von Sven (Gast)


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.

von Cyblord -. (cyblord)


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.

von EAF (Gast)


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?

von Rolf M. (rmagnus)


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.

von Peter D. (peda)


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.

von Georg (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.