[英]What does this mean? return func()
在 Linux 内核源代码中,我找到了这个。
int (*check_fb)(struct device *, struct fb_info *);
...
...
...
static int pwm_backlight_check_fb(struct backlight_device *bl,
struct fb_info *info)
{
struct pwm_bl_data *pb = bl_get_data(bl);
//something more
return !pb->check_fb || pb->check_fb(pb->dev, info);
}
没看懂最后的return
语句是什么意思? 我们可以返回一个函数吗? 通常我们返回一个值。
不,它本身不返回函数。 它实际上是
NULL
值。NULL
return
值。NULL
!NULL
( 1
)。 引用C11
标准,第 6.8.6.4 章, return
语句
如果执行带有表达式的
return
语句,则表达式的值将作为函数调用表达式的值返回给调用者。
在 C++ 中, ||
运算符是一个短路运算符,这意味着,如果第一个参数为真,它甚至永远不会评估第二个参数,因为true || anything
true || anything
都是真实的。
因此声明:
return !pb->check_fb || pb->check_fb(pb->dev, info);
是一种检查非 NULL 函数指针并使用它来决定当前返回值的简短方法:
如果函数指针为NULL
,只需返回!NULL
,它将为您提供1
。
如果它不是NULL, !pb->check_fb
将评估为0
,因此您必须调用该函数,并使用它返回的任何内容作为该函数的返回值。
所以它实际上等同于:
if (pb->check_fb == 0)
return 1;
return pb->check_fb (pb->dev, info);
现在我说“有效”,但返回的实际值可能与你看到的和我上面的最终代码片段略有不同。 但是,如果您将它们视为真/假值,效果是相同的。
从技术上讲,最后一行应该是:
return 0 || pb->check_fb (pb->dev, info);
具有完全相同的返回值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.