C中有很多語句什麼都不做。這意味着刪除它們在程序行爲中將沒有可觀察的變化。允許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){
}
是的,閱讀問題:[關於優化'不是一個陳述'在C?](http://stackoverflow.com/questions/13566662/regarding-optimization-for-not-a-statment-in-c)可能會幫助你。 –
函數調用可能不會被刪除..嘗試用'-o2'也 –
@GrijeshChauhan。我的意思是不管,他們*允許*刪除它? – Pacerier