请考虑以下代码:
int f(int a,int b,int *c) { *c = a + b; return *c > 0; } void check(int a,int b) { int c; if(f(a,b,&c) && c < 10) { puts("sum is in range [1,9]"); } }
解决方法
如果出现控制评估顺序的序列点,则是安全的.
// bad: evaluation order of f() and (c < 10) is not specified by C if(f(a,&c) & c < 10) { // OK,left half of && must occur first. if(f(a,&c) && c < 10) {
简单&&表达式,没有C,C的区别.使用C/C++评估左侧,如果左侧不是假,则评估右侧.
在C中,这一点上的行为更加复杂,&&运算符可以超载,然后两边的&&总是被评估.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。