我可以执行以下操作:
static int16_t foo (void);
static int16_t bar (void) {
return foo();
}
但我的编译器抱怨
static void foo (void);
static void bar (void) {
return foo();
}
ANSI C 不允许 void 函数返回 void 函数吗?为什么?
如果你想bar
回来foo
,那么你必须更改返回类型bar
这样它就会返回一个function that takes void and returns void
而不是仅仅void
:
static (void (*)(void)) bar(void) {
return foo;
}
另外,第一个示例也不应该起作用。
根据您的编辑进行编辑:你不能(不应该)return
任何数据来自void
功能。void
是缺乏数据。在C语言中,你只能return;
来自声明为返回的函数void
——你不能return <data>;
从中。
So foo()
不给你任何数据。它只能用作语句,不能用作表达式。
return foo();
因此,从两方面来说没有意义:第一是bar
可能不会返回任何内容,因为它已声明返回void
,第二个是即使bar
does返回实际的数据类型,foo()
仍然是类型void
你不能return
that.
第一个例子之所以有效是因为foo
and bar
return int16_t
s,这是实际数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)