这里有一个非常简单的问题,但我找不到答案:
假设我有一些条件条款由几个条件组成.比如像
if((a == b && strcmp(string1, string)) || x <= 5)
Run Code Online (Sandbox Code Playgroud)
我的问题是:无论第一个结果是什么结果,所有这些陈述都会被评估,或者一旦结果明确,评估就会停止.
由于我不确定我的问题是否清楚,这是一个例子:
if(a == 5 || b > 12 || (c = someFun()) == 3)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果a == 5,则不需要进一步检查,因为big语句的结果为TRUE,所以我们可以继续.这意味着不会评估someFun().
是这样的吗?我知道Java在&&和&resp之间有所不同.|| 和| (后者在C中无法提供),但我不知道C如何处理这个问题
C评估直到它知道答案为止,所以:
EvalsToTrue()&& EvalsToAnything()评估两者
EvalsToFalse()&& EvalsToAnything()仅评估第一个
EvalsToTrue()|| EvalsToAnything()仅评估第一个
EvalsToFalse()|| EvalsToAnything()评估两者