Wybacz, jeśli to pytanie jest naiwne. Rozważ następujący program:
#include <stdio.h>
int main() {
int i = 1;
i = i + 2;
5;
i;
printf("i: %d\n", i);
}
W powyższym przykładzie, oświadczenia 5;i i;wydawać całkowicie zbędny, jednak kompiluje kod bez ostrzeżenia lub błędy domyślnie (jednakże gcc nie rzucać warning: statement with no effect [-Wunused-value]ostrzeżenie, gdy biegł z -Wall). Nie mają one wpływu na resztę programu, więc dlaczego są uważane za prawidłowe stwierdzenia? Czy kompilator po prostu je ignoruje? Czy są jakieś korzyści z dopuszczenia takich oświadczeń?
;po nim. To komplikuje język dodać więcej reguł, kiedy wyrażenia nie może być sprawozdanie
printf()? Instrukcja w 5;zasadzie mówi „rób cokolwiek 5robi (nic) i ignoruj wynik. Twoje zdanie printf(...)jest„ rób cokolwiek printf(...)robi i ignoruj wyniki (wartość zwracana od printf()) ”. C traktuje to samo. Pozwala to również na kod taki jak (void) i;gdzie ijest parametr funkcji, którą przesyłasz, aby voidoznaczyć ją jako celowo nieużywaną
printf()ma wpływ, nawet jeśli zignorujesz wartość, którą w końcu zwraca. Natomiast 5;nie ma żadnego efektu.