当您调用具有返回值的函数而不将其分配给任何变量时会发生什么?

时间:2016-02-22 17:04:24

标签: c function return-value

#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),会发生什么?

4 个答案:

答案 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,编译器可能会检测到该值未被使用,并忽略计算的值。