每当我们调用函数返回值时,为什么不需要捕获值?考虑以下C代码,
int main()
{
int i;
scanf("%d",&i);
printf("Value of i is: ",i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里scanf()返回值1,但因为它没有在任何地方捕获,为什么没有弹出错误?允许这样编程的原因是什么?
主要是因为C中的表达式也会产生值.例如:x = 1;产生值1.有时您x = y = 1;会将其用于多次分配,但更常见的情况是不这样做.
在早期的C中,void返回类型也没有被发明,所以每个函数都返回一些值,无论它是否通常有用(例如,你的调用printf也返回一个值).
语言规则不会使这个错误(这样做会失去与几乎现有代码的兼容性),并且由于这很常见并且很少表明存在问题,因此大多数编译器也不会对此进行警告.一些lint工具可以做到,这导致一些误入歧途的程序员编写类似的东西(void)printf("whatever");(例如,将未使用的返回void信号转换为信号,确实它是真的,当它被忽略时是真的有意.但是,这很少有任何好处,并经常确实有点伤害,所以(谢天谢地)它很少见.