每当我们调用函数返回值时,为什么不需要捕获值? 考虑以下C代码,
int main()
{
int i;
scanf("%d",&i);
printf("Value of i is: ",i);
return 0;
}
这里scanf()返回值1,但因为它没有被捕获到任何地方为什么没有弹出错误? 允许这样编程的原因是什么?
答案 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。包含scanf
和printf
。如果你总是必须“捕获”它来满足编译器,那真的很烦人;在一个大型程序中,您最终会创建数千个变量,仅用于存储您从未查看过的返回值。
答案 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'不一定要返回,因为我们只想检查数字是偶数还是奇数......不需要返回