この質問が初心者の場合はご容赦ください。次のプログラムを検討してください。
#include <stdio.h>
int main() {
int i = 1;
i = i + 2;
5;
i;
printf("i: %d\n", i);
}
上記の例では、ステートメント5;
とi;
はまったく不要に見えますが、コードはデフォルトで警告やエラーなしでコンパイルされます(ただし、gccはでwarning: statement with no effect [-Wunused-value]
実行すると警告をスローします-Wall
)。それらはプログラムの残りの部分に影響を与えないので、なぜ彼らはそもそもなぜ有効なステートメントと見なされるのですか?コンパイラは単にそれらを無視しますか?そのような発言を許可することには何か利点がありますか?
;
それの後に置くことでステートメントになることができます。式をステートメントにできない場合についてのルールを追加すると、言語が複雑になります
printf()
ないでしょうか?声明は、5;
基本的には「何でも言う5
(何も)を行わず、その結果を無視します。あなたの文がprintf(...)
ある『何でもprintf(...)
ありませんし、結果を無視する(からの戻り値printf()
』)。Cの扱いは、同じ。これには、また、コードすることができます(void) i;
場所i
ですvoid
意図的に未使用としてマークするためにキャストする関数へのパラメーター
printf()
最終的に返される値を無視しても、呼び出しには効果があるため、これはまったく同じではありません。対照的5;
に、まったく効果がありません。