C には何もしないステートメントがたくさんあります。つまり、それらを削除しても、プログラムの動作に目に見える変化はありません。
C 標準によると、C コンパイラはこれらの冗長なステートメントを最適化できますか?
たとえば、次のようなコードがあるとします。
#include <stdio.h>
void f(void);
int main(void){
printf("a");
f(); // function call statement that provably does nothing
printf("b");
1000; // redundant expression statement
printf("c");
; // null statement
printf("d");
int x = 1; // assignment statement that is not used
printf("e");
return 0;
}
void f(void){
1000; // redundant expression statement
; // null statement
int x = 1; // assignment statement that is not used
}
コンパイラは、以下と同じオブジェクト コードを生成できますか? :
#include <stdio.h>
void f(void);
int main(void){
printf("a");
printf("b");
printf("c");
printf("d");
printf("e");
return 0;
}
void f(void){
}