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

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

問題描述網絡

你見過一個這樣的bool值嗎,判斷 var 和 !var 都是成立的,今天被我遇到了,是在一個坑裏遇到的。
今天調試了一個程序,發送一個網絡消息,結果老是得不到迴應,深刻排查發現,居然是由於一個具備4年工做經驗的同事張某的不良編碼風格埋下的坑,真是汗。編碼

在C++中,bool值的隨機值多是任意的,不必定是咱們覺得的0/1,
而不一樣的系統中對bool值的判斷也是搞笑。
我把代碼簡化一下來講明問題。spa

代碼演示debug

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的結果:code

resp:112
YES
NO

結果解釋:blog

從運行結果看出,Windows沒問題,若是未初始化,debug版直接停止進程。
而linux中:
若是是int類型,則0就是假,其餘都是真;而bool類型卻不是這樣;bool類型若是未初始化,則判斷真也成立,假也成立,徹底是亂來。若是初始化了,無論初始化爲多少,都能像int判斷真假同樣了。
這裏說清楚了這個問題,應該算是運行庫的缺陷吧。

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

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

相關文章
相關標籤/搜索