我曾尝试调试但没有运气我不明白为什么第二个 printf() 调用 increment() 三次,但第一个调用两次预期。

#include <stdio.h>

#define MAX(a, b) ( (a) > (b) ? (a) : (b) )

int increment(){
    static int i = 42;
    i += 5;
    printf("increment returns %d\n", i); // 47, 52, 57
    return i;
}

int main( int argc, char ** argv ) {
    int x = 50;
    // parameters compute from right to left side
    printf("max of %d and %d is %d\n",
                x, //3rd: 50
                increment(), //2nd: 52
                MAX(x, increment()) //1st: 50,47 -> 50
                );

    printf("max of %d and %d is %d\n",
                x, //3rd: 50
                increment(), //2nd: 62
                MAX(x, increment()) //1st: 50,57 -> 57
                );
    return 0;
}

结果
increment returns 47
increment returns 52
max of 50 and 52 is 50
increment returns 57
increment returns 62
increment returns 67
max of 50 and 67 is 62

最佳答案

因为你这么说:

MAX(x, increment())

评估为
( (x) > (increment()) ? (x) : (increment()) )

如果条件不满足,则评估 : 之后的部分,从而再次调用该函数。

关于c - 为什么下面的函数被调用三次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17918720/

10-11 07:38