Entschuldigen Sie, wenn diese Frage naiv ist. Betrachten Sie das folgende Programm:
#include <stdio.h>
int main() {
int i = 1;
i = i + 2;
5;
i;
printf("i: %d\n", i);
}
Im obigen Beispiel erscheinen die Anweisungen 5;und i;völlig überflüssig, der Code wird jedoch standardmäßig ohne Warnungen oder Fehler kompiliert (gcc gibt jedoch eine warning: statement with no effect [-Wunused-value]Warnung aus, wenn mit ausgeführt wird -Wall). Sie haben keine Auswirkungen auf den Rest des Programms. Warum werden sie also überhaupt als gültige Aussagen angesehen? Ignoriert der Compiler sie einfach? Gibt es irgendwelche Vorteile, solche Aussagen zuzulassen?
;danach gesetzt wird. Es würde die Sprache komplizieren, weitere Regeln hinzuzufügen, wenn Ausdrücke keine Anweisungen sein können
printf()? Die Anweisung 5;lautet im Wesentlichen "Mach was 5auch immer (nichts) und ignoriere das Ergebnis. Deine Aussage printf(...)lautet" Mach was printf(...)auch immer macht und ignoriere die Ergebnisse (der Rückgabewert von printf()) ". C behandelt diese gleich. Dies ermöglicht auch Code wie" (void) i;wo iist " Ein Parameter für eine Funktion, die Sie void
printf()einen Effekt hat, selbst wenn Sie den Wert ignorieren, den es schließlich zurückgibt. Im Gegensatz dazu 5;hat überhaupt keine Wirkung.