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){
}