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.
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.
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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.