我想在下面的语句中执行多条件。
Head* head;
If ((head->next!=NULL)&&(head->next->next!=NULL))
执行顺序对于上述语句在没有seg错误的情况下工作非常重要。
有没有办法在编译时以编译器执行它的方式来确定。
答案 0 :(得分:9)
标准。
您可以保证首先评估第一个表达式。
此外,您可以保证,如果第一个评估为false
,则不会评估第二个(查找短路)。如果没有发生这种情况,编译器就不合规了。
答案 1 :(得分:1)
订单总是从左到右。因此
(cond1) && (cond2)
将始终首先测试cond1,如果这是真的,那么cond2。
答案 2 :(得分:1)
&&
和||
操作员强制从左到右评估并引入序列点,因此可以保证在评估RHS之前对LHS进行全面评估并应用所有副作用