• 变量与“零值”的比较


    bool 变量与“零值”进行比较

    bool 变量与“零值”进行比较的 if 语句怎么写?

    bool bTestFlag = FALSE;
    
    • 1

    想想为什么bool 变量一般初始化为 FALSE 比较好?

    可以让这个布尔变量取反后是非零,因为FLASE 的值大家都知道,在编译器里被定义为0;但TRUE 的值呢?都是1吗?很不幸,不都是1。Visual C++定义为1,而它的同胞兄弟Visual Basic 就把TRUE 定义为-1。那很显然FALSE取反后是TRUE,但TRUE取反后不是FLASE。

    A), if(bTestFlag == 0);	
    	if(bTestFlag == 1);
    	
    B), if(bTestFlag == TRUE);
    	if(bTestFlag == FLASE);
    	
    C), if(bTestFlag);
    	if(!bTestFlag);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    哪一组或是那些组正确呢?我们来分析分析:

    A)写法:bTestFlag 是什么?整型变量?如果要不是这个名字遵照了前面的命名规范,恐怕很容易让人误会成整型变量。所以这种写法不好。
    B)写法:FLASE 的值大家都知道,在编译器里被定义为 0;但 TRUE 的值呢?都是 1吗?很不幸,不都是 1。Visual C++定义为 1,而它的同胞兄弟 Visual Basic 就把 TRUE 定义为-1.那很显然,这种写法也不好。

    大家都知道 if 语句是靠其后面的括号里的表达式的值来进行分支跳转的。表达式如果为真,则执行 if 语句后面紧跟的代码;否则不执行。那显然,本组的写法很好,既不会引起误会,也不会由于 TRUE 或 FLASE 的不同定义值而出错。记住:以后写代码就得这样写。

    整型变量与“零值”比较

    应当将整型变量用“==”或“!=”直接与0比较。

    if   (value   ==   0)       
    if   (value   !=   0) 
    
    //不可模仿布尔变量的风格而写成 
    if   (value) //   会让人误解   value是布尔变量 
    if   (!value)    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    float 变量与“零值”进行比较

    float 变量与“零值”进行比较的 if 语句怎么写?

    float fTestVal = 0.0;
     
    A), if(fTestVal == 0.0);
    	if(fTestVal != 0.0);
     
    B), if((fTestVal >= -EPSINON) &&	(fTestVal	<= EPSINON)); //EPSINON 为定义好的精度。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    B组是正确的
    千万要留意,无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“> =”或“ <=”形式。

    指针变量与“零值”进行比较

    应当将指针变量用“==”或“!=”与NULL比较。

    指针变量的零值是“空”(记为NULL)。尽管NULL的值与0相同,但是两者意义不同。
    假设指针变量的名字为p,它与零值比较的标准if语句如下: 
    if   (p   ==   NULL) //   p与NULL显式比较,强调p是指针变量 
    if   (p   !=   NULL) 
    
    不要写成 
    if   (p   ==   0)   //   容易让人误解p是整型变量 
    if   (p   !=   0)             
    
    或者 
    if   (p) //   容易让人误解p是布尔变量 
    if   (!p) 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    有时候我们可能会看到 if (NULL == p) 这样古怪的格式。不是程序写错了,是程序员为了防止将 if (p == NULL) 误写成 if (p = NULL),而有意把p和NULL颠倒。编译器认为 if (p = NULL) 是合法的,但是会指出 if (NULL = p)是错误的,因为NULL不能被赋值。

  • 相关阅读:
    第23个520情人节,女程序猿送男朋友什么?
    MSYS2下搭建Qt开发环境
    Flink学习25:窗口计算函数
    【重要】Heygen订阅指南和用法详解!让照片学说话?一张照片变演讲?Heygen订阅值得吗?
    Python之列表操作和内存模型
    Docker Swarm实现容器的复制均衡及动态管理:详细过程版
    科学家探索用于光电子的二维半导体
    git命令行学习二
    GPU如何成为AI的加速器
    Qt定时器
  • 原文地址:https://blog.csdn.net/qq_51029592/article/details/125587054