c – 在同一表达式内表达中使用副作用的结果是否安全?
发布时间:2020-12-16 10:36:27 所属栏目:百科 来源:网络整理
导读:请考虑以下代码: 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]"); }} 如果的第二部分如果被评估,是否保证通过函数调用f(a, c)保持分配给它的值?此行为是否从
请考虑以下代码:
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]"); } } 如果&&的第二部分如果被评估,是否保证通过函数调用f(a,& c)保持分配给它的值?此行为是否从C更改为C? 解决方法
如果出现控制评估顺序的序列点,则是安全的.
// 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中,这一点上的行为更加复杂,&&运算符可以超载,然后两边的&&总是被评估. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |