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