C:使用&&运算符时是否存在“惰性求值”,就像在C ++中一样?
我想知道这看起来是否正确:
while((next !=NULL) && (strcmp(next->name, some_string) < 0) { //some process }
我的意思是,如果next是NULL
,那么表达式的第二部分将不会被编译器测试过? 我听说在C ++中就是这种情况(但我甚至都不确定)。
有人可以证实我在某些编译器上不会出现奇怪的错误吗?
是&&
被短路并且您正确使用它。
如果next
是NULL
则不会发生字符串比较。
是的,在C ++短路and
/ or
运算符可用。
这是C-faq在这个问题上回答的问题。
在C和C ++中都是如此。
这将适用于延迟评估(如果第一个被评估为“false”,则不评估第二个语句),除非您的编译器非常符合标准,甚至不能将其命名为C编译器。 该领域的数百万行代码依赖于此行为,因此您可以认为这种行为只是保证。