看看下面的C++代碼:C++串(常量字符[1])到bool類型轉換 - 原因/解釋和後果
// imagine 10.000 lines if C++ here
bool test() {
// imagine 300 loc here
return "";
}
int main(int argc, char** argv) {
bool whaaaaaat = test();
return 0;
}
當編譯這些行的結果是:
BUILD SUCCESSFUL (total time: 208ms)
甚至沒有警告!
請確認:
- 「」 是由C處理++編譯器爲char [1]又名字符*
- 然後將其轉化爲bool
- 這始終是= 0 =>總是正確!
問: 當程序繼續下去,會不會有該程序的狀態,任何負面影響(破碎的記憶?)。
這個設置非常危險,編譯器至少應該給出警告!
你改變什麼,如果'回報 「」 號;''來回報1;'?你會有同樣的感覺嗎?怎麼樣'返回2;'?零是錯誤的。其他一切都是真實的。 –
問題是關於函數總是返回true,沒有編譯器的任何警告或錯誤,這只是簡明的例子。同意一個良好的編碼風格可以阻止它。 –
哦!所以你認爲'#define MAX_FOO 30' ...'int getMaxFoo(){return MAX_FOO; }'應該給出一個警告或錯誤?!問題在於你的期望,國際海事組織。具有恆定返回值的函數完全是常規的。 –