有没有理由将零用作"默认"函数返回值?我注意到stdlib和几乎所有其他地方的几个函数,当没有返回正确的数字(例如pow(),strcpy())或错误(负数)时,只返回零.
在看到几个用否定逻辑进行的测试后,我感到很好奇.很混乱.
为什么不返回1,或0xff,或任何正数?
Fed*_*oni 24
的理由是,要区分集合对应于不同的错误所有可能的(负)返回值从唯一情况,就是都去确定.追求这种区别的最简单,最简洁和最C-ish的方法是逻辑测试,因为在C中所有整数都是"真",除了零,你想要返回零表示"唯一的情况",即你想要零作为"好"值.
同样的推理也适用于Unix程序的返回值,但实际上在Unix shell脚本的测试中逻辑是反转的:返回值0意味着"真"(例如,查看/ bin /的返回值)真正).
Jam*_*ran 19
最初,C没有"无效".如果函数没有返回任何内容,则只需将声明中的返回类型留空即可.但这意味着,它返回了一个int.
所以,一切都返回了一些东西,即使它没有任何意义.并且,如果您没有专门提供返回值,那么编译器用于返回值的寄存器中的任何值都会成为函数的返回值.
// Perfectly good K&R C code.
NoReturn()
{
// do stuff;
return;
}
int unknownValue = NoReturn();
Run Code Online (Sandbox Code Playgroud)
为了避免出现问题,人们将其清零.