C++中未初始化的bool值的問題


原創文件,歡迎閱讀,禁止轉載。

問題描述

你見過一個這樣的bool值嗎,判斷 var 和 !var 都是成立的,今天被我遇到了,是在一個坑里遇到的。
今天調試了一個程序,發送一個網絡消息,結果總是得不到回應,深入排查發現,竟然是因為一個具有4年工作經驗的同事張某的不良編碼風格埋下的坑,真是汗。

在C++中,bool值的隨機值可能是任意的,不一定是我們以為的0/1,
而不同的系統中對bool值的判斷也是搞笑。
我把代碼簡化一下來說明問題。

代碼演示

typedef struct
{
    bool    resp;    //是否反饋
    char*     ret;    //執行結果
}ARG;

int main(int argc,char* argv[])
{
    ARG argSt;
    //argSt.resp=true;//這里的bool值不初始化
    printf("resp:%d\n",argSt.resp);

    if( argSt.resp )
    {
        puts("YES");
    }
    if( !argSt.resp )
    {
        puts("NO");
    }
}

Windows的結果:

resp:44
YES

linux的結果:

resp:112
YES
NO

結果解釋:

從運行結果看出,Windows沒問題,如果未初始化,debug版直接中止進程。
而linux中:
如果是int類型,則0就是假,其他都是真;而bool類型卻不是這樣;bool類型如果未初始化,則判斷真也成立,假也成立,完全是亂來。如果初始化了,不管初始化為多少,都能像int判斷真假一樣了。
這里說清楚了這個問題,應該算是運行庫的缺陷吧。

總結:
必須有良好的編碼風格,未初始化這種毛病是不能容忍的。

原創文件,歡迎閱讀,禁止轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM