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中,这一点上的行为更加复杂,&&运算符可以超载,然后两边的&&总是被评估.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...