在C中,初始化一個變量到它自己的值是否合理?如果是的話,爲了什麼?初始化一個變量到它自己的未定義值
請允許我詳細說明。在Git源文件中,有一些將變量初始化爲自己的未定義值的示例,如transport.c或wt-status.c中所示。我從這些聲明中刪除了任務並運行測試。看到沒有迴歸,我認爲這些任務是多餘的。
另一方面,我用GCC 4.6和Clang 2.9做了一些簡單的測試。
#include <stdio.h>
int main() {
printf("print to increase probability of registers being non-zero\n");
int status = status;
return printf("%i\n", status);
}
與-Wall -std=c99
和各種-O
水平打印編譯沒有警告,並表明status == 0
。具有非零優化級別的Clang雖然會打印一些垃圾值。這讓我推斷這些表達式的結果是不確定的。
我可以想象,這樣的賦值可以抑制未初始化的變量警告,但從Git獲取的示例並非如此。刪除作業不會引入任何警告。
這樣的任務是一個未定義的行爲?如果不是,你用它們做什麼?
我建議在Git郵件列表上進行更改。 Here's what I've learned。
也許git中的例子不會爲* your *系統禁止未初始化的變量警告,而是在其他開發人員經常使用的系統上禁止該警告。使用GCC,未初始化的變量警告受優化標誌影響,並且Clang生成一組完全不同的警告,即使它是GCC的「插入式替代品」。 –
我會初始化這些變量爲0(或-1),而不是完全放棄初始化。有人爲了某個目的添加了代碼;即使我發現使用奇怪的機制,我也可以尊重目的。 –
@JonathanLeffler,不僅奇怪,在陷阱表示的平臺上會產生未定義的行爲。 –