Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 三元算子的替换_C - Fatal编程技术网

C 三元算子的替换

C 三元算子的替换,c,C,设params为指向包含成员valueInt的结构的指针。我想在指针结构中检查valueInt的值,但必须先检查指针是否为空。所以我尝试了条件运算符,比如: if ((NULL == params) ? 1: (cJSON_Int != params->valueInt)) { // Do Something } 我的要求是首先检查指针的空等价性,然后取消引用它。但根据我们公司的指导方针,我不应该使用三元运算符。还有什么方法可以代替我在这里使用的条件语句(类似于短路语句)?逻辑OR运

params为指向包含成员valueInt的结构的指针。我想在指针结构中检查valueInt的值,但必须先检查指针是否为空。所以我尝试了条件运算符,比如:

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

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

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

所以你可以这样做:

if ((NULL == params) || (cJSON_Int != params->valueInt))
{
    ...
}
如果
params
为空或第二个条件为真,则将进入
if
块。如果
NULL==params
的计算结果为true,则不会对第二部分进行计算。

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

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

这些都是相当糟糕的指导方针。不管怎样,您展示的代码是否捕获了所需的逻辑?为什么不使用常规的&&?它是短路的,所以如果指针为空,它将立即退出。我刚才给出了一些示例代码!我想要一些功能,比如在ADA中我们有短路:然后/或者
如果(NULL==params | | cJSON_Int!=params->valueInt)
将显示快捷方式
&&
|
只有在严格必要时才会对右侧进行评估。这并不奇怪。我发现,那些禁止使用
if(params==NULL)
而支持yoda条件的组织,例如
if(NULL==params)
也倾向于禁止三元运算符。反之亦然。也就是说,这里不需要三元。使用
&&
|
快捷方式这一事实。代码比等价的三元代码更干净、更短、更明显。如果NULL==params,他的原始代码将输入“Do something”。谢谢,这就是我想要的@阿披实古玛很高兴我能帮上忙。如果您觉得有用,请随意使用。“为了更好地反映您的逻辑”:-)是的,这是我想使用的,但我不希望我的代码看起来这么大。我想要一行逻辑。无论如何,谢谢