printf 和 return 有什么区别?

Roe*_*oee -1 c

计算两个给定整数值的总和。如果两个值相同,则返回其总和的三倍。

int main() {
    printf("%d\n", test(1, 2));
    printf("%d", test(2, 2));
}

int test(int x, int y) {
    int sum;

    if (x == y) {
        sum = (x + y) * 3;
        printf("sum = %d\n", sum);
    } else  {
        sum = (x + y);
        printf("sum = %d", sum);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行这段代码时,我得到了错误的输出,但是当我使用return语句而不是 时printf,我得到了正确的输入。为什么?

Wil*_*ell 5

由于test不返回值(没有return语句),因此尝试引用返回值会导致未定义的行为。如果您进行一些小的修改,可能更容易理解程序中发生的事情:

#include <stdio.h>
int
test(int x, int y)
{
        int sum = x + y;
        if( x==y ){
                sum *= 3;
        }
        printf("sum = %d XXX ", sum);
        return sum;
}

int
main(void)
{
        printf("** %d **\n", test(1, 2));
        printf("** %d **\n", test(2, 2));
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面程序的输出是:

sum = 3 XXX ** 3 **
sum = 12 XXX ** 12 **
Run Code Online (Sandbox Code Playgroud)

在可以调用in之前调用in的testin 参数列表。该内部函数执行并打印。该函数返回一个值,该值作为参数传递给打印的in main 。printfmainprintfmainprintftestsum = ... XXX printf** ... **