【发布时间】:2016-06-04 16:35:35
【问题描述】:
假设所有函数共享相同的返回类型,是否可以通过用空括号声明的“通用”函数指针调用每个函数(因此它没有指定其参数)?
这是一个示例代码,说明它:
#include <stdio.h>
void fun1(void)
{
printf("fun1\n");
}
void fun2(int a)
{
printf("fun2: %d\n", a);
}
void fun3(int a, int b)
{
printf("fun3: %d %d\n", a, b);
}
int main(void)
{
void (*pf)(); // pseudo-generic function pointer
pf = fun1;
pf();
pf = fun2;
pf(0);
pf = fun3;
pf(1, 2);
return 0;
}
【问题讨论】:
-
有趣的问题。有效,如“它是否按预期编译和运行?”是的,是否说“使用
-Wall编译没有警告?”在我的编译器上是的:-) -
是的,即使在偏执模式
-Wall -Wextra -pedantic -WconversionGCC 4.9 下也不会发出警告... @Dilettant -
根据 K&R 是合法的。
-
@GrzegorzSzpetkowski 我猜这个问题更多的是关于声明的合法性而不是它的语义。我将撤回接近投票。
标签: c function-pointers