但是起什么作用?

山楠舒山楠舒最佳答案最佳答案

这个如果,是对于函数可不可调用性的一种判断,其本质上是用来保证对函数调用的正确性。 假设某个函数可以成功调用,那么返回值就会是个合法的指针。

而所谓的参数列表是否合法,其实就代表了是否存在一个指向函数的“有效”指针与其对应的变量进行匹配(传引用的原理) ,而所谓的不存在这样的指针和变量的情况其实就是函数无法被调用的错误情况,也就是这种情况下的返回值是不存在的,或者说为空的。这样我们就通过检查返回值的状态判断了这次的调用是否正确。

但是如果这次调用发生了错误,我们不知道到底是出在参数传递错误,还是目标函数本身就不存在(函数未实现)或者实现了但是却出现了内部错误,这种情况下我们就可以通过不同的返回值类型来进一步判断:如果发生的是前两种情况,那么结果就是一个合法有效的指针,而如果是第三种情况,则必然会造成指针失效,从而结果就会是一个空值。通过这种技巧我们可以把原本可能很复杂,需要大量堆栈跟踪和逻辑判断的错误检测问题转化为相对简单高效查找漏洞的流程。

这种技术实际上就是异常处理机制和边界检查机制,C/C++中可以通过#include 和#include 来进行实现。现代的大部分语言都提供了类似的功能,比如Java中的throws,Python中的AssertionError等等。这些技术虽然看起来比较低级,而且似乎只能处理那些明显错误的场景,但是事实上很多编译器以及运行时的检测系统都会依赖这种技术来完成大部分的错误排查。这是因为这种技术可以直接询问程序本身(相对于调试)是否出现了错,并且找到了源头,对于开发者和维护者来说,这已经是最好的结果了。

我来回答
请发表正能量的言论,文明评论!