Hab mal eine Frage: wenn ich in einem C-Programm viele #define-Anweisungen mache, verbrauchen diese dann auch Speicherplatz oder nur dann an der einen Stelle, wo das Dingen benutzt wurde? Angenommen, ich mach mir eine Datei mit Mehrwertsteuer-Defines für verschiedene Länder #define mwst_brd 19 #define mwst_belg 23 ... und wenn ich dann im Quellcode nur eines von diesen verwende, wird dann im compilierten Programm nur der eine benutzt? oder werden die anderen "defines" auch vorratshalber mit im compilierten Programm geschrieben? Wenn ich eine Headerdatei hab und habe eigene Funktionen dadrinnen, zB. int mache_plus (int z1, z2) { return (z1+z2); } mache_minus () mache_mal () mache_geteilt () .... und wenn ich im Hauptprogramm dann nur eine dieser Funktionen aufrufe, die anderen dann aber auch noch mit drinnen sind - verbrauchen die dann auch Speicher (compiliertes Programm) - oder nur genau die Funktionen, die auch "verwendet" werden?
Pappnase schrieb: > Hab mal eine Frage: wenn ich in einem C-Programm viele > #define-Anweisungen mache, verbrauchen diese dann auch Speicherplatz > oder nur dann an der einen Stelle, wo das Dingen benutzt wurde? #define ist eine Präprozessor-Anweisung zur Text-Ersetzung. Das heißt, daß alle #defines weg sind, nachdem der Präprozessor des Compilers drübergelaufen ist. > Angenommen, ich mach mir eine Datei mit Mehrwertsteuer-Defines für > verschiedene Länder > > #define mwst_brd 19 > #define mwst_belg 23 > ... > > > und wenn ich dann im Quellcode nur eines von diesen verwende, wird dann > im compilierten Programm nur der eine benutzt? oder werden die anderen > "defines" auch vorratshalber mit im compilierten Programm geschrieben? Gar keins davon wird ins compilierte Programm geschrieben. Wenn du irgendwo mwst_brd benutzt, wird der Präprozessor dieses durch 19 ersetzen. Es ist also im compilierten Programm nachher so, als hättest du an der Stelle direkt 19 hingeschrieben. > Wenn ich eine Headerdatei hab und habe eigene Funktionen dadrinnen, zB. > > int mache_plus (int z1, z2) > { return (z1+z2); } > > mache_minus () > > mache_mal () > > mache_geteilt () > > .... > > und wenn ich im Hauptprogramm dann nur eine dieser Funktionen aufrufe, > die anderen dann aber auch noch mit drinnen sind - verbrauchen die dann > auch Speicher (compiliertes Programm) - oder nur genau die Funktionen, > die auch "verwendet" werden? Funktionen sind was völlig anderes als Makros. Technisch haben die beiden überhaupt nichts mit einander zu tun. Ob nicht benutzte Funktionen im Programm landen, hängt davon ab, welchen Compiler und Linker du verwendest und wie du sie verwendest. Auch kann es davon abhängen, ob die Funktionen static sind, da nur in diesem Fall der Compiler sicher sagen kann, ob die Funktion benutzt wird oder nicht.
Rolf Magnus schrieb: > Funktionen sind was völlig anderes als Makros. Technisch haben die > beiden überhaupt nichts mit einander zu tun. Ob nicht benutzte > Funktionen im Programm landen, hängt davon ab, welchen Compiler und > Linker du verwendest und wie du sie verwendest. Auch kann es davon > abhängen, ob die Funktionen static sind, da nur in diesem Fall der > Compiler sicher sagen kann, ob die Funktion benutzt wird oder nicht. Danke für die Antwort. Ich habe gelesen, dass man Funktionen auch als #define-Anweisungen setzen kann, so ist es wohl in vielen der Headerdateien, auch habe ich mal ein Programm gesehen, dass einmal als "normaler" Quellcode geschrieben war eben mit void Name(void) und dann der Funktionskram, dann aber auch dieses gleiche Programm mit seinen Funktionen, die alle mit #define begannen. Es ging mir dabei letztlich um die Frage, wenn man sich selber eine Datei erstellt und sich Funktionen darin abspeichert, die man sich selber gemacht hat und diese in anderen Programmen wiederbenutzen möchte, aber eben nicht alle - ob es dann sinnvoll ist, sich eigene Funktionsbibliotheken in Form von so #define-Anweisungen zu speichern? Es müsste ja doch auch z.B. bei der stdio.h so sein, da sind viele Funktionen drinnen, aber nur diejenigen, die man aufruft, werden mit in das Programm eincompiliert und der ganze Rest nicht - oder täusche ich mich da grade?
Olaf B. schrieb: > siehe hier: > > Beitrag "C: Funktion mit #define als Platzhalter" danke für den Link, da steht ja einiges drinnen.
Pappnase schrieb: > Ich habe gelesen, dass man Funktionen auch als #define-Anweisungen > setzen kann, Solange du nicht genug Erfahrung hast, solltest du auch Funktionen schreiben, wenn du Funktion meinst. Durch Ersetzen von Funktionen mit Makros kann man sich nämlich ganz schnell ganz gehörig selber ins Knie schiessen, wenn man nicht weiß was man tut.
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.