返回0的基本原理作为C/C++中的默认值

Mar*_* MD 15 c c++

有没有理由将零用作"默认"函数返回值?我注意到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)

为了避免出现问题,人们将其清零.


Ana*_*tts 2

因为 Bash 和大多数其他 UNIX shell 环境将 0 视为成功,将 -x 视为系统错误,将 x 视为用户定义的错误。