Пробачте, якщо це питання є наївним. Розглянемо наступну програму:
#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;взагалі не має ефекту.