printf 和 return 有什么区别?
计算两个给定整数值的总和。如果两个值相同,则返回其总和的三倍。
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);
}
}
当我运行这段代码时,我得到了错误的输出,但是当我使用return语句而不是 时printf,我得到了正确的输入。为什么?
回答
由于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;
}
上面程序的输出是:
sum = 3 XXX ** 3 **
sum = 12 XXX ** 12 **
在可以调用in之前调用in的testin 参数列表。该内部函数执行并打印。该函数返回一个值,该值作为参数传递给打印的in main 。printfmainprintfmainprintftestsum = ... XXX printf** ... **