在 MSVC 和 gcc(GCC)4.8.3 20140911 上,以下编译并运行正常:
#include <stdio.h>
int func(int a, int b){
return 0;
}
int main(void){
int (*funcPointer)(int a, int b);
funcPointer = func;
printf("funcPointer = %p\n", funcPointer);
return 0;
}
这种行为是否定义明确,或者它是非标准的,并且函数指针类型具有命名参数(即名称以及参数列表中的类型)实际上是非法的吗?
答案 0 :(得分:4)
您可以在函数指针中使用参数。这完全有效。参数列表与被调用函数的列表匹配,名称只是可选的。
它也可以写成
int (*funcPointer)(int,int);
我的意思是
int (*funcPointer)(int a, int b);
这是有效的,您可以通过调用
来验证相同的内容int res = funcPointer(3,4);
并返回
int func(int a, int b){
return a+b;
}
答案 1 :(得分:1)
这完全合法。 a
中的b
和funcPointer
名称不会用于任何内容,但允许使用。你可以使用你想要的任何(合法)名称,它们根本不重要。
答案 2 :(得分:0)
答案中的一个问题:
为什么要编译它是什么意思?
int func(int a) { return a; }
int main(int argc, char **argv)
{
int(*a)(int x(float)) = func;
printf("%d\n", a(1));
return 0;
}