in der folgenden Funktion
%Vor%Was bedeutet die Aussage
? %Vor%bedeuten?
Die Anweisung wird zur Laufzeit nicht ausgeführt und führt zu keinem Maschinencode.
Es unterdrückt eine Compiler-Warnung, dass p
im Rumpf der Funktion nicht verwendet wird. Dies ist eine portable und sichere Möglichkeit, diese Warnung in einer Vielzahl verschiedener Compiler wie GCC, Clang und Visual C ++ zu unterdrücken.
"Cast to void
" ist ein C-Sprachen-Idiom, das standardmäßig den Compiler und lint
Warnungen über nicht verwendete Variablen oder Rückgabewerte unterdrückt.
In diesem Fall teilt Dietrich Epp dem Compiler korrekt mit, dass Sie wissen, dass Sie nicht das Argument p
verwenden und Ihnen keine Warnungen "unbenutztes Argument" geben.
Die andere Verwendung dieses Idioms, bei der der Rückgabewert einer Funktion an void
übergeben wird, ist die traditionelle Methode, lint
oder, noch wichtiger, anderen Programmierern zu sagen, dass Sie eine bewusste Entscheidung getroffen haben, diese nicht zu überprüfen der Rückgabewert einer Funktion. Zum Beispiel:
Würde bedeuten "Ich weiß printf()
gibt einen Wert zurück, und ich sollte es wirklich überprüfen, aber ich habe mich entschieden, mich nicht zu kümmern".
Es wird verwendet, um die Warnung vor unbenutzten Funktionsparametern zu vermeiden. Es wird einfach verworfen, tut nichts, außer dass der Ausdruck eine Nebenwirkung hat.
C11 §6.3.2.2 void
Der (nicht vorhandene) Wert eines void-Ausdrucks (ein Ausdruck, der den Typ void hat) soll nicht in irgendeiner Weise verwendet werden, und implizite oder explizite Conversions (außer zu void) nicht sein auf einen solchen Ausdruck angewendet. Wenn ein Ausdruck eines anderen Typs als void ausgewertet wird Ausdruck, sein Wert oder Bezeichner wird verworfen. (Ein void Ausdruck wird für seine ausgewertet Nebenwirkungen.)
Eine weitere Möglichkeit, die Warnung vor unbenutzten Funktionsparametern zu vermeiden, ist:
%Vor% Der void
sagt dem Compiler oder dem Lint keine Warnung. Wenn es eine Variable gibt, die nie benutzt wird, wird der Compiler oder der Lint Vorschlag gelöscht.
Wenn Sie es nicht löschen möchten, können Sie void verwenden. Wie der Link: Wie kann ich "definiert" ausblenden aber nicht verwendet "Warnungen in GCC?
Tags und Links c