首页 > 解决方案 > 为什么'&&'可以用来判断最大界限?

问题描述

我不知道这条线发生了什么num && *num == maxNum。为什么var && *var可以用max bound来判断?我真的需要有人来解释这个...

void func(...,size_t *_Nullable num,...){

    size_t num_=0;
    somethingHappen_get_num(&num_);

    if(num){
        *num =  num_;
    }

    if (num && *num == maxNum) { //why???????????
        Log_print("num is too big");
        return Error;
    }
}

标签: cmax

解决方案


因为numsize_t *_Nullable numie指针类型,所以你应该总是检查它是否为空ieNULL或有一些有效数据,如果它有效,那么只有它可以安全地去引用(*num)它。

这里

if (num && (*num == maxNum)) { } /* safe & correct, && means if 1st operand is valid then only check 2nd operand which is recommended here */

条件检查是正确和安全的,首先它检查是否num不是NULL,如果这是真的,那么只有它的检查,*num == maxNum即有什么东西在那里num你可以做*num

考虑以下场景

if (num || (*num == maxNum)) { } /* bad practice, don't do it */

num如果是,上述条件检查会产生问题NULL,由于逻辑或操作数||,它将检查第二个操作数,因为第一个操作数为假,并且在执行时会导致崩溃*num


推荐阅读