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

Pac*_*ac0 14 c evaluation boolean

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

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

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

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

cod*_*ict 16

&&短路并且您正确使用它.
如果nextNULL字符串比较永远不会发生.


Pab*_*ruz 8

是的,在C++短路andor运营商可用.

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


Jac*_*ope 7

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

  • @ruslik - 这不是更正。C++ 和 C 均由标准涵盖,并且此答案对于这两个标准的规定是正确的(对于 C++ 中的内置类型) (2认同)