三元运算符的替换

时间:2016-03-09 19:27:02

标签: c

params 成为包含成员 valueInt 的结构的指针。我想在指向的结构中检查 valueInt 的值,但仅在检查指针是否为NULL之后。所以我尝试了条件运算符:

if ((NULL == params) ? 1: (cJSON_Int != params->valueInt)) 
{
 // Do Something
}

我的要求是首先检查指针NULL等效,然后取消引用它。但根据我们公司的指导原则,我不应该使用三元运算符。有什么方法可以代替我在这里使用的条件语句(类似于短路语句)?

2 个答案:

答案 0 :(得分:2)

逻辑OR运算符是一个短路运算符,这意味着如果它可以从左操作数确定表达式的最终结果,它将不会计算右操作数。

所以你可以这样做:

if ((NULL == params) || (cJSON_Int != params->valueInt))
{
    ...
}

如果if为NULL或第二个条件为真,则会进入params块。如果NULL == params评估为真,则不会评估第二部分。

答案 1 :(得分:1)

我发现在分支中使用显式案例更容易(也更易读):

if (params == NULL) {
    // Do something
} else {
    // It is not NULL, check value
    if (cJSON_Int != params->valueInt) {
        // value is not cJSON_Int
    } else {
        // optional else
    }
}