#define-Anweisung in c/c++

Gast #2906087
Lesenswert?
• ▲
▼
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?
Gast #2906100
Lesenswert?
• ▲
▼
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.
Gast #2906123
Lesenswert?
• ▲
▼
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?

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