使用“&&”和“||”在 C 条件之外的语句中
Using '&&' and '||' in a statement outside of condition in C
我正在用 C 编写 uni 作业,我得到了一个已经完成的程序来调试它,我已经遍历了这行代码
int main() {
FILE *personFile;
//...
//some code
//..
personFile && fclose(personFile); //??
return 0;
}
而不是
if (personFile != NULL)
fclose(personFile);
我认为 fclose(personFile)
如果 personFile
为 NULL,则永远不会发生,因为 C 快速评估 "conditions" 并在 && 中跳过第二个参数,如果第一个参数为假,但我不确定
真的是这样吗?这种 "cheating" 条件的方式是一种不好的做法,还是我很幸运从未见过这样的事情?
由于运算符 &&
使用短路求值(如果左操作数为假/0
,表达式永远不可能为真,所以不要费心去求右操作数),这只是在调用 fclose
之前检查文件指针是否为非 NULL
。
||
运算符也使用短路计算,如果左操作数的计算结果为非零,则无论右操作数是什么,整个表达式肯定为真,因此不进行计算。
Is this really how it works? And is this way of "cheating" conditons a bad practice or am I just lucky to never have seen something like this?
有很多 "clever tricks" 实际上是惯用的 C,在代码审查期间不会引起注意;据我所知,这不是其中之一。
Is this really how it works?
对
And is this way of "cheating" conditons a bad practice or am I just lucky to never have seen something like this?
使用逻辑或条件运算符来控制程序流代替控制结构不是好的做法,不是。这不是那些运营商的目的。 IOW,写作
some_condition && some_action();
替代
if ( some_condition )
some_action();
不是好的做法。
但是,如果您想要计算一个布尔表达式并将结果赋值到某处,即使其中一个条件是函数调用,也没关系:
result = some_value && some_function();
IOW,我们正在使用 &&
运算符 计算一个值 ,而不是控制程序流(即使 &&
影响是否 some_function()
被调用)。
同样适用于 ?:
运算符。写作
some_condition ? some_action() : some_other_action();
替代
if ( some_condition )
some_action();
else
some_other_action();
是不好的做法。然而,
result = some_condition ? some_function() : some_other_function();
没问题,因为我们不是用它来控制程序流,而是用它来计算一个值。
我正在用 C 编写 uni 作业,我得到了一个已经完成的程序来调试它,我已经遍历了这行代码
int main() {
FILE *personFile;
//...
//some code
//..
personFile && fclose(personFile); //??
return 0;
}
而不是
if (personFile != NULL)
fclose(personFile);
我认为 fclose(personFile)
如果 personFile
为 NULL,则永远不会发生,因为 C 快速评估 "conditions" 并在 && 中跳过第二个参数,如果第一个参数为假,但我不确定
真的是这样吗?这种 "cheating" 条件的方式是一种不好的做法,还是我很幸运从未见过这样的事情?
由于运算符 &&
使用短路求值(如果左操作数为假/0
,表达式永远不可能为真,所以不要费心去求右操作数),这只是在调用 fclose
之前检查文件指针是否为非 NULL
。
||
运算符也使用短路计算,如果左操作数的计算结果为非零,则无论右操作数是什么,整个表达式肯定为真,因此不进行计算。
Is this really how it works? And is this way of "cheating" conditons a bad practice or am I just lucky to never have seen something like this?
有很多 "clever tricks" 实际上是惯用的 C,在代码审查期间不会引起注意;据我所知,这不是其中之一。
Is this really how it works?
对
And is this way of "cheating" conditons a bad practice or am I just lucky to never have seen something like this?
使用逻辑或条件运算符来控制程序流代替控制结构不是好的做法,不是。这不是那些运营商的目的。 IOW,写作
some_condition && some_action();
替代
if ( some_condition )
some_action();
不是好的做法。
但是,如果您想要计算一个布尔表达式并将结果赋值到某处,即使其中一个条件是函数调用,也没关系:
result = some_value && some_function();
IOW,我们正在使用 &&
运算符 计算一个值 ,而不是控制程序流(即使 &&
影响是否 some_function()
被调用)。
同样适用于 ?:
运算符。写作
some_condition ? some_action() : some_other_action();
替代
if ( some_condition )
some_action();
else
some_other_action();
是不好的做法。然而,
result = some_condition ? some_function() : some_other_function();
没问题,因为我们不是用它来控制程序流,而是用它来计算一个值。