【发布时间】:2017-03-03 11:14:40
【问题描述】:
我刚刚注意到,使用 -pedantic -Wall 和 gcc 和 clang 编译时没有任何错误或警告。
#include <stdio.h>
int x = 0;
void func(int f(const char *)) {
f("func()!");
}
int main(void) {
func(puts);
}
在这种情况下,参数f 似乎被视为指向函数int (*)(const char *) 的指针。
但这是我从未见过或听说过的行为。这是合法的C代码吗?如果是这样,那么当您将函数作为函数的参数时会发生什么?
【问题讨论】:
-
函数指针是有效的参数,你可以用它们传递不同的回调函数。接收它们的函数,然后可以调用该函数,没有问题。
-
在这种情况下,参数的类型被写为“函数”而不是“指向函数的指针”,在这种情况下,它会被声明为
int (*f)(const char *)。 -
@KeineLust 这是正确的副本。
标签: c function pointers parameters function-pointers