#include <stdio.h>
#include <stdlib.h>
int f(int x) {
return x;
}
int main ( int argc,char * argv[]) {
int a=4;
f(a);
printf("PASSED!\n");
return 0;
}
如果您在未指定任何内容的情况下致电f(a)
,会发生什么?
答案 0 :(得分:5)
当您调用具有返回值的函数而不将其分配给任何变量时会发生什么?
不需要使用或分配函数的返回值。它被忽略(通常是安静的)。
该功能仍然执行,其副作用仍然存在。
考虑3个函数:int scanf()
,int f()
和int printf()
,它们的返回值都被忽略,但函数仍然被执行。
int a=4;
scanf("%d", &a);
f(a);
printf("PASSED!\n");
在强健代码中忽略返回值是不好的,尤其是scanf()
。
如@Olaf所述,某些编译器可能会启用警告。
显式忽略函数的结果有时用(void)
表示,以平息该警告。
(void) f(a);
答案 1 :(得分:2)
使用您的示例,我们可以看一下它是如何逐行评估的。从主要开始。
int a=4;
我们现在有一个变量 a ,其值为4.
f(a);
所以现在使用 a 调用函数 f ,其值为4.因此在函数 f 中,第一个参数命名为 x ,它只返回参数 x 。
所以
的评价f(a);
只是
4;
这样的程序编译并运行得很好。
int main(int argv, char *argv[]) {
1 + 1;
return 0;
}
答案 2 :(得分:2)
当你拨打f(a)而不将其分配给任何东西时会发生什么?
- &GT;什么都没有。
调用函数(具有返回值)而不将其分配给任何内容时会发生什么?
- &gt;该函数将被执行,或者像你的情况一样没有意义,或者像修改静态变量或全局变量那样有很多意义。返回值将被忽略。
答案 3 :(得分:0)
返回值通常存储在寄存器中,不会褪色 当编译器需要寄存器时,它将被覆盖。
如果函数是 inlin e,编译器可能会检测到该值未被使用,并忽略计算的值。