每当我们调用一个返回值的函数时,为什么不需要捕获该值? 考虑以下 C 代码,
int main()
{
int i;
scanf("%d",&i);
printf("Value of i is: ",i);
return 0;
}
这里 scanf() 返回值 1,但由于它没有在任何地方捕获,为什么没有弹出错误? 允许这样编程的原因是什么?
最佳答案
主要是因为 C 中的表达式也产生值。例如:x = 1;
产生值 1。有时你将它用于多重赋值,如 x = y = 1;
,但更多时候你不这样做。
在早期的 C 中,void
返回类型也没有被发明出来,所以每个 函数都会返回一些值,无论它是否普遍有用(例如,您对 printf
的调用也会返回一个值)。
语言规则不会将此视为错误(这样做会失去与现有代码的兼容性),并且由于这很常见并且很少表示有问题,因此大多数编译器也不会对此发出警告。一些 lint 工具可以,这导致一些误入歧途的程序员编写类似 (void)printf("whatever");
的东西(即将未使用的返回值转换为 void
当它被忽略时,表明它真的、真的是故意的。然而,这很少有任何好处,而且经常造成相当大的伤害,所以(谢天谢地)它很少被看到。
关于c - 函数返回可选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6961442/