Forum: Compiler & IDEs #ifndef geht nicht


von Definator (Gast)


Lesenswert?

wenn ich unter C18
1
#define NOCODE
2
#ifndef NOCODE
3
4
blub();
5
6
#endif
schreibe, wird blub(); nicht compiliert und der Code wird entsprechend 
kleiner. Wenn ich das gleiche mit gcc mache sehe ich aber keine 
Größenänderung.
Muß ich noch etwas voreinstellen?

von katastrophenheinz (Gast)


Lesenswert?

Vielleicht mal Optimierung einschalten ( mit -Os ) ?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Definator schrieb:

> Wenn ich das gleiche mit gcc mache sehe ich aber keine Größenänderung.

Vielleicht tut die Funktion blub – ihrem Namen entsprechend – gar
nichts, so dass der Aufruf vom Compiler wegoptimiert wird.

> Muß ich noch etwas voreinstellen?

Nein.

von Definator (Gast)


Lesenswert?

>Vielleicht tut die Funktion blub – ihrem Namen entsprechend – gar
>nichts
Nee, ist ziemlich viel Zeuch drin.
Werd aber trotzdem mal das Codeoptimieren näher anguggen.

von Guest (Gast)


Lesenswert?

Du hast doch NOCODE definiert, deswegen führt er die Finder nicht aus

von Guest (Gast)


Lesenswert?

Uahhhh, diese Autovervollständigung. Ich meinte nicht Finder sonder 
ifndef - Anweisung , also die Blub-Funtion.

von Oliver (Gast)


Lesenswert?

Definator schrieb:
> wird blub(); nicht compiliert und der Code wird entsprechend
> kleiner.

blub() wird ja an der Stelle nur aufgerufen, die Funktion selber steht 
anscheinend woanders. Und ja, gcc bzw. dessen linker wirft ungenutzten 
Code nicht immer raus.

Oliver

von Peter D. (peda)


Lesenswert?

Definator schrieb:
> Wenn ich das gleiche mit gcc mache sehe ich aber keine
> Größenänderung.

Naja, der Code sollte schon um einen Call-Befehl kleiner werden. Schau 
mal genau hin.

von Der (Gast)


Lesenswert?

Entfernst du damit nur den Prototypen der Funktion oder auch die 
Funktion an sich?

von LassWonadersDefinen (Gast)


Lesenswert?

Definator schrieb:
> Nee, ist ziemlich viel Zeuch drin.

Das interessiert aber nicht, du hast ja nur den Call geswitcht.

von Stefan N. (stefan_n)


Lesenswert?

Definator schrieb:
> wenn ich unter C18
> #define NOCODE
> #ifndef NOCODE
>
> blub();
>
> #endif
> schreibe, wird blub(); nicht compiliert und der Code wird entsprechend
> kleiner. Wenn ich das gleiche mit gcc mache sehe ich aber keine
> Größenänderung.
> Muß ich noch etwas voreinstellen?

Steht der Funktionsaufruf am Ende einer Funktion? Es sein, dass der 
Optimierer einfach ein RET durch ein JP ersetzt, oder ähnliche Späße 
veranstaltet, weswegen du keinen Größenunterschied siehst, wenn du den 
Aufruf rein oder raus nimmst.

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.