This Question分開是關於讓gcc編譯器,當你犯了一個錯字,警告和自身初始化的變量。爲什麼-Winit自我從-Wuninitialized
int f() { int i = i; return i; }
原來你需要的-Winit-self
flag除了-Wuninitialized
:
-Winit-self
(C,C++,Objective-C和Objective-C中++只)發出警告未初始化的變量,是用自己初始化。注意 此選項只能與-Wuninitialized
選項,這反過來 只-O1
及以上的作品被使用。
我的問題是:爲什麼這不是-Wuninitialized
的默認行爲?什麼是你想警告未初始化變量的用例,而不是自初始化變量,這同樣很麻煩?
發生這種情況時,有時初始化是不重要的,像填充的32位數字逐位(考慮利用公知的排列置換另一個32位號碼)。在這種情況下,初始化並不重要,並且可能會使某人對算法的工作方式感到困惑,因此您可以使用idom uint32_t val = val;向讀者指示您有意將該值未初始化。 –
@SteveCox當然,我可以看到,但它仍然值得懷疑,因爲它是未定義的行爲,編譯器可以用未定義的行爲做一些奇怪的事情。 –
當然,我並不真正做到這一點,我剛看到它的地方,人們希望能督促未實際投入的'XOR EAX編譯器,eax'但仍想隱藏未初始化變量的警告。 –