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.
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
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?
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.
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
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

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.