带参数的函数调用在C中是如何工作的?

带参数的函数调用在C中是如何工作的?,c,function,return-value,function-parameter,C,Function,Return Value,Function Parameter,我正在学习C语言,遇到了一些我很好奇的事情。对我来说,像下面这样在main中调用foo不会返回任何结果: int foo(bar){ return bar * 2; } int main(){ foo(10); } 只有当我使用printf格式化输出时,它才会将结果从foo返回到main。这是故意的还是我遗漏了什么?以下示例有效: int foo(bar){ return bar * 2; } int main(){ // will return 20

我正在学习C语言,遇到了一些我很好奇的事情。对我来说,像下面这样在main中调用foo不会返回任何结果:

int foo(bar){
    return bar * 2;
}

int main(){
    foo(10);
}
只有当我使用printf格式化输出时,它才会将结果从foo返回到main。这是故意的还是我遗漏了什么?以下示例有效:

int foo(bar){
    return bar * 2;
}

int main(){
    // will return 20
    printf("%d\n", foo(10));
}
中的函数调用foo(10)

intfoo(bar){
返回条*2;
}
int main(){
傅(10),;
}
确实返回值。但是您没有在任何变量中捕获它,也没有打印返回值。第二个示例实际打印了从
foo(10)返回的值

中的函数调用foo(10)

intfoo(bar){
返回条*2;
}
int main(){
傅(10),;
}

确实返回值。但是您没有在任何变量中捕获它,也没有打印返回值。第二个示例实际打印了从
foo(10)返回的值

已经有了一个有用的答案,所以这里有一个更专业的答案:

在第二个示例中,您打印了
foo(10)
的结果,但是有一种方法可以真正从C程序返回值

int main() {
    return 14;
}
在shell中运行脚本后,
echo$?
(或Windows上的
echo%errorlevel%
)将立即打印程序的退出代码,对于简单的C程序,它是
main
返回的值

通常,值0表示成功,其他任何值都表示某个错误或其他错误。生成退出代码的另一种常见方法是将整数(或常量
exit_SUCCESS
exit_FAILURE
)从
stdlib.h
传递到
exit
函数


(当然,您通常希望打印程序的结果,或将其写入文件,以便以后查看或保存,但这是一种可能有用的区别,即使它不经常出现。)

已经有了一个有用的答案,因此这里有一个更技术性的答案:

在第二个示例中,您打印了
foo(10)
的结果,但是有一种方法可以真正从C程序返回值

int main() {
    return 14;
}
在shell中运行脚本后,
echo$?
(或Windows上的
echo%errorlevel%
)将立即打印程序的退出代码,对于简单的C程序,它是
main
返回的值

通常,值0表示成功,其他任何值都表示某个错误或其他错误。生成退出代码的另一种常见方法是将整数(或常量
exit_SUCCESS
exit_FAILURE
)从
stdlib.h
传递到
exit
函数


(当然,您通常希望打印程序的结果,或将其写入文件,以便以后查看或保存,但这是一种可能有用的区别,即使它不经常出现。)

在第一个示例中,您忽略了
foo()
的返回值。您不必使用它,但是在这种情况下,如果忽略函数的结果,调用函数是没有意义的。在第二个示例中,您将其返回值传递给
printf()
。您能帮我将其哑一点吗?一般来说,我对编程非常陌生。在第一个例子中,我忽略了返回值是什么意思?我目前的印象是,“foo()”中返回的“bar”变量将被传递到函数的参数中。不是吗?你说
foo()
不返回值,但它返回值。您可以使用,
int-retval=foo(10)获取并报告该值;printf(“%d\n”,retval)这是第二个更棘手的示例,因为您从未看到返回值,而是直接将其输入到
printf
中。您的函数
foo()
返回一个值。您需要在变量(另一个整数)中或通过函数“捕获”该值(就像您使用
printf()
)。在第一个示例中,您没有对返回变量
foo()
”执行任何操作。现在我明白了所有这些伟大的答案。谢谢在第一个示例中,您忽略了
foo()
中的返回值。您不必使用它,但是在这种情况下,如果忽略函数的结果,调用函数是没有意义的。在第二个示例中,您将其返回值传递给
printf()
。您能帮我将其哑一点吗?一般来说,我对编程非常陌生。在第一个例子中,我忽略了返回值是什么意思?我目前的印象是,“foo()”中返回的“bar”变量将被传递到函数的参数中。不是吗?你说
foo()
不返回值,但它返回值。您可以使用,
int-retval=foo(10)获取并报告该值;printf(“%d\n”,retval)这是第二个更棘手的示例,因为您从未看到返回值,而是直接将其输入到
printf
中。您的函数
foo()
返回一个值。您需要在变量(另一个整数)中或通过函数“捕获”该值(就像您使用
printf()
)。在第一个示例中,您没有对返回变量
foo()
”执行任何操作。现在我明白了所有这些伟大的答案。谢谢我想我现在明白了。因此,函数正确地返回了值,但由于没有用于存储返回值的变量或用于打印返回值的printf语句,因此在程序执行时它永远不会出现?我想我现在明白了。因此,函数正确地返回了值,但由于没有用于存储返回值的变量,也没有用于打印返回值的printf语句,因此在程序执行时它永远不会显示?