函数返回可选值

时间:2011-08-05 19:11:11

标签: c function

每当我们调用函数返回值时,为什么不需要捕获值? 考虑以下C代码,

int main()
{
      int i;
      scanf("%d",&i);
      printf("Value of i is: ",i);
      return 0;
}

这里scanf()返回值1,但因为它没有被捕获到任何地方为什么没有弹出错误? 允许这样编程的原因是什么?

8 个答案:

答案 0 :(得分:5)

返回值的函数具有该功能,以方便程序员使用。如果您对返回值不感兴趣,请不要使用它。

答案 1 :(得分:5)

主要是因为C中的表达式也会产生值。例如:x = 1;会产生值1.有时您会将其用于x = y = 1;之类的多重分配,但更常见的情况不是。{/ p>

在早期的C中,void返回类型也没有被发明,所以每个函数返回一些值,无论它是否通常有用(例如,你的调用printf也会返回一个值。)

语言规则不会使这个错误(这样做会失去与几乎现有代码的兼容性),并且由于这很常见并且很少表明存在问题,因此大多数编译器也不会对此进行警告。一些lint工具会导致一些误入歧途的程序员编写像(void)printf("whatever");这样的东西(即,将未使用的返回值转换为void以表示它被忽略时真的是真的有意。然而,很少有任何好处,并且经常造成相当大的伤害,所以(谢天谢地)它很少见。

答案 2 :(得分:1)

在这个例子中你需要返回值吗?没有。所以你在这种情况下没有使用它。但在另一种情况下,返回值可能很重要。例如,如果您想读取输入流中可用的某个整数,那么您可以执行以下操作:

while (scanf("%d", &i) == 1) {
    // do something
}

如果有EOF,则此循环将中断。这里需要返回值。

因此摘要在需要时使用返回值,不需要时使用。允许这样的编程,因为两种情况都是可能的。

答案 3 :(得分:0)

许多库函数返回您可能不会想到的值。想象一下,必须使用每个printf电话的返回值! (printf返回打印的字符数。)

答案 4 :(得分:0)

几乎每个native c函数都返回一个int。包含scanfprintf。如果你总是必须“捕获”它来满足编译器,那真的很烦人;在一个大型程序中,您最终会创建数千个变量,仅用于存储您从未查看过的返回值。

答案 5 :(得分:0)

原因是C没有其他既定的处理错误的方法而不是返回值。应该几乎总是检查这些返回的值,也就是那些返回到报告成功或失败的值(除非你只是涂鸦或者你有证据证明函数不会失败)。

现在,由于返回值用于其他事情,而不是返回成功/失败信息,因此可能存在以下情况,即您不会对函数返回的值感兴趣,而只是执行它的副作用。在这种情况下,强制程序员检查/绑定返回的值将变得非常潮湿。

答案 6 :(得分:0)

简单:如果不使用返回值,则不要使用它。

你没有强制要求。

(也就是说,在这种情况下,你应该:你现在不知道scanf是否遇到错误。)

答案 7 :(得分:0)

每次评估价值时都不是这样,&它必须被存储或返回,因为你获得的值可能被其他一些函数用来评估不同类型的东西。一个值可能是一个度量...例如考虑下面的简单程序,我们要检查输入的数字是偶数还是不是

'int main()
{
 int a;   
 printf("Enter a number");
 scanf("%d",&a);
 if(a%2==0)
 printf("even number");
  else
 printf("odd no");
  return 0;
  }'

这里变量'a'不一定要返回,因为我们只想检查数字是偶数还是奇数......不需要返回