2010-11-30 6 views
3

Mögliche Duplizieren:
Need for prefixing a function with (void)…Warum sollte der Rückgabetyp für eine Funktion angegeben werden, wenn sie in C aufgerufen wird?

Hallo,

ich mit einigem C-Code arbeiten und der Autor verwendet hat eine Syntax ich mit unbekannter bin. Mit dem folgenden Aufruf eine Funktion:

(void) msleep(&gActivationCount, NULL, PUSER, 
    "com_apple_dts_kext_KauthORama.RemoveListener", &oneSecond); 

Es scheint, dass der Autor die Rückkehr wirft oder einfach nichtig erklärt, was die Funktion Prototyp wahrscheinlich (ich sage wahrscheinlich, weil ich nicht die Funktion, um es den Prototyp lösen kann), sagt für den Rückgabewert. Ist das nicht gleichbedeutend mit:

msleep(&gActivationCount, NULL, PUSER, 
    com_apple_dts_kext_KauthORama.RemoveListener", &oneSecond); 

Danke,

Scott

Antwort

4

Dies ist ein alter (und extrem schändlicher) Trick, um explizit Ihre Absicht zu kennzeichnen, den Rückgabewert einer Funktion für lint und Compiler, die eine Warnung ausgeben, zu ignorieren. Vergiss es, dass du es jemals gesehen hast. Bei modernen Compilern müssen Sie diese Warnung aktivieren, und einige (z. B. gcc) bieten Erweiterungen an, um nur die spezifischen Funktionen zu kennzeichnen, bei denen das Ignorieren des Rückgabewerts gefährlich ist.

3

Er ist das Ergebnis Gießen ausdrücklich für ungültig zu erklären, um den Wert zu verwerfen, aber häufiger ist es eine Warnung, um loszuwerden, über ein unbenutztes Ergebnis (das sollte wahrscheinlich an erster Stelle nicht ignoriert werden!)

Wenn die Funktion bereits void zurückgibt, ist es noch sinnloser auf (void) zu werfen.

Ältere Compiler scheinen übermäßig eifrig zu sein, unbenutzte Werte zu melden - heutzutage braucht man zum Beispiel __attribute__((warn_unused_result)), wenn Sie eine Funktion haben, die wirklich überprüft werden muss.

Verwandte Themen