C:使用&&运算符时是否存在“惰性求值”,就像在C ++中一样?

我想知道这看起来是否正确:

while((next !=NULL) && (strcmp(next->name, some_string) < 0) { //some process } 

我的意思是,如果next是NULL ,那么表达式的第二部分将不会被编译器测试过? 我听说在C ++中就是这种情况(但我甚至都不确定)。

有人可以证实我在某些编译器上不会出现奇怪的错误吗?

&&被短路并且您正确使用它。
如果nextNULL则不会发生字符串比较。

是的,在C ++短路and / or运算符可用。

这是C-faq在这个问题上回答的问题。

在C和C ++中都是如此。

这将适用于延迟评估(如果第一个被评估为“false”,则不评估第二个语句),除非您的编译器非常符合标准,甚至不能将其命名为C编译器。 该领域的数百万行代码依赖于此行为,因此您可以认为这种行为只是保证。