Простите, если этот вопрос наивен. Рассмотрим следующую программу:
#include <stdio.h>
int main() {
int i = 1;
i = i + 2;
5;
i;
printf("i: %d\n", i);
}
В приведенном выше примере, операторы 5;и i;кажутся совершенно излишними, но код компилируется без предупреждений или ошибок по умолчанию (однако, НКУ делает бросить warning: statement with no effect [-Wunused-value]предупреждение , когда бежал с -Wall). Они не влияют на остальную часть программы, так почему же они в первую очередь считаются действительными утверждениями? Компилятор просто игнорирует их? Есть ли какие-либо преимущества в разрешении таких заявлений?
;после него. Это усложнит язык, добавив больше правил, когда выражения не могут быть утверждениями
printf()? В заявлении в 5;основном говорит , «делать все , что 5не делает (ничего) , и игнорировать результат. Ваше заявление printf(...)является„делать все , что printf(...)делает , и игнорировать результаты (возвращаемое значение printf())“. C лечит те же самое. Это также позволяет кода , такие как , (void) i;где iнаходится параметр функции, которую вы приводите, чтобы voidпометить его как намеренно неиспользуемый
printf()имеет эффект, даже если вы игнорируете значение, которое он в конечном итоге возвращает. В отличие от 5;этого не имеет никакого эффекта вообще.