C - 具有命名参数的函数指针类型
C - function pointer types with named parameters
在 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;
}
这种行为是明确定义的,还是非标准的,并且函数指针类型具有命名参数(即参数列表中的名称和类型)实际上是非法的?
这是完全合法的。 funcPointer
中的名称 a
和 b
不用于任何用途,但它们是允许的。您可以使用您想要的任何(合法)名称,它们根本不重要。
您的函数指针中可以有一个参数。这是完全有效的。参数列表与被调用函数的参数列表匹配,名称只是可选的。
也可以写成
int (*funcPointer)(int,int);
我是说
int (*funcPointer)(int a, int b);
这是有效的,您可以通过调用
来验证
int res = funcPointer(3,4);
返回
int func(int a, int b){
return a+b;
}
答案中的一个问题:
为什么会编译,这意味着什么?
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;
}
在 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;
}
这种行为是明确定义的,还是非标准的,并且函数指针类型具有命名参数(即参数列表中的名称和类型)实际上是非法的?
这是完全合法的。 funcPointer
中的名称 a
和 b
不用于任何用途,但它们是允许的。您可以使用您想要的任何(合法)名称,它们根本不重要。
您的函数指针中可以有一个参数。这是完全有效的。参数列表与被调用函数的参数列表匹配,名称只是可选的。
也可以写成
int (*funcPointer)(int,int);
我是说
int (*funcPointer)(int a, int b);
这是有效的,您可以通过调用
来验证int res = funcPointer(3,4);
返回
int func(int a, int b){
return a+b;
}
答案中的一个问题:
为什么会编译,这意味着什么?
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;
}