2016-03-09 170 views
-3

params是指向包含成员valueInt的结构的指针。我想检查指针结构中的valueInt的值,但仅在检查指针是否不是NULL之后。所以,我想条件运算符,如:替代三元运算符

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

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

+2

这些都是一些非常不好的指导方针。无论如何,你展示的代码是否捕获了所需的逻辑? – juanchopanza

+1

为什么不使用常规&&?它是短路的,所以如果指针为NULL,它会立即退出。 – Filkolev

+0

我刚刚举了一些示例代码! 我想要一些像ADA中的功能,我们有短路: AND THEN/OR THEN –

回答

2

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

所以,你可以这样做:

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

这将进入if块,如果params为空或第二个条件是真实的。如果NULL == params的计算结果为真,则不会评估第二部分。

+0

他的原始代码将输入“做些什么”,以防NULL == params。 –

+0

谢谢,这是我想要的! –

+0

@AbhishekKumar很高兴我能帮到你。如果您觉得它有用,请随时[接受此答案](http://stackoverflow.com/help/accepted-answer)。 – dbush

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 
    } 
} 
+0

是的,这是我想用的,但我不希望我的代码看起来很大。我想要一行逻辑。不管怎样,谢谢 –