C - 具有命名参数的函数指针类型

C - function pointer types with named parameters

MSVCgcc (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 中的名称 ab 不用于任何用途,但它们是允许的。您可以使用您想要的任何(合法)名称,它们根本不重要。

您的函数指针中可以有一个参数。这是完全有效的。参数列表与被调用函数的参数列表匹配,名称只是可选的。

也可以写成

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;
}