【发布时间】:2015-04-22 08:08:02
【问题描述】:
我不明白为什么不同的代码会起作用,因为它们是相同的。
#include <stdio.h>
void foo() {
printf("Hello\n");
}
void foo1(void fn()) {
(*fn)();
fn();
}
void foo2(void (*fn)()) {
(*fn)();
fn();
}
int main(void) {
foo1(foo);
foo2(foo);
return 0;
}
如果它们相同,那么为什么这不起作用?
typedef void F1(), (*F2)();
int main(void) {
F1 f1;
F2 f2;
// error: lvalue required as left operand of assignment
f1 = foo1;
f2 = foo2;
return 0;
}
附言
我的兴趣不在typedef(第二个例子)。
我只对第一个示例有疑问。
那就是:
- 函数声明
- 函数调用
【问题讨论】:
-
(*fn)(), (*****fn)() 等是相同的,因为 fn 是一个函数指示符。
-
参考见 6.3.2.1 C11 草案版本 N1570 中的左值、数组和函数指示符
标签: c pointers callback language-lawyer