zoukankan      html  css  js  c++  java
  • 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
    ",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判断真假一样了。
    这里说清楚了这个问题,应该算是运行库的缺陷吧。

    总结:
    必须有良好的编码风格,未初始化这种毛病是不能容忍的。

    原创文件,欢迎阅读,禁止转载。

  • 相关阅读:
    Spring事务管理(详解+实例)
    DRUID连接池的实用 配置详解
    spring配置c3p0
    Spring使用JdbcTemplate实现对数据库操作
    spring整合web 项目
    2018美团JAVA面试问题与总结
    Mybatis中的update动态SQL语句
    去除文件夹左下角的问号
    spring的aop实现原理
    Spring的bean管理注解和配置文件混合使用
  • 原文地址:https://www.cnblogs.com/zhaojk2010/p/5973919.html
Copyright © 2011-2022 走看看