Forum: Compiler & IDEs Frage zu Funktionsaufruf


von Thomas M. (thomaswm)


Lesenswert?

Ich habe gestern eine ganze Weile in meinem Code zum Auslesen einer MMC 
gesucht. Ein bestimmer Befehl wollte einfach nicht funktionieren.

Ich habe die Funktion:
1
void mmc_enable()
2
{
3
...
4
}

Nun hatte ich in der Main den Aufruf ohne Klammern geschrieben, das war 
der Fehler.
1
...
2
mmc_enable;
3
...

Meine Frage: Warum hatte da der Compiler nicht gemeckert?
Ich arbeite mit dem Workpad plus von myAVR.

MfG

von Sebastian (Gast)


Lesenswert?

Die Anweisung "mmc_enable;" ist zunächst kein Fehler, da in C jeder 
Ausdruck (z.B. Variablen, Konstanten etc.) als Anweisung erlaubt ist 
(nichts anderes ist i.Ü. ein echter Funktionsaufruf, z.B. 
"mmc_enable();", da hier das Ergebnis nicht interessiert und sofort 
verworfen wird; eine sinnvolle Anweisung ist das trotzdem, da vor dem 
Verwerfen in jedem Fall die Funktion aufgerufen wird).

In diesem Falle ist "mmc_enable" jedoch der Pointer auf die Funktion 
"mmc_enable". Dieser steht dem Programm als Konstante (nach dem Linken) 
zur Verfügung, d.h. kann sofort ausgewertet werden. Da natürlich 
außerdem nichts passiert, ist das eine Anweisung ohne Effekt – insb. 
wird dadurch die Funktion nicht aufgerufen. Eine gültige Anweisung ist 
es aber allemal, wenn auch i.A. nicht sehr sinnvoll.

Ein guter C-Compiler kann in solchen Fällen aber zumindest eine Warnung 
generieren, der GCC tut das mit "-Wunused-value" (bei "-Wall" dabei).

von Thomas M. (thomaswm)


Lesenswert?

Super ausführliche Antwort!

Vielen Dank!

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.