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

Min*_*s97 3 c gcc function-pointers named-parameters visual-c++

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;
}
Run Code Online (Sandbox Code Playgroud)

这样的行为是定义明确的,还是非标准的,并且函数指针类型具有命名参数(即名称及其参数列表中的类型)实际上是非法的?

Gop*_*opi 5

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

也可以写成

int (*funcPointer)(int,int);
Run Code Online (Sandbox Code Playgroud)

我的意思是

int (*funcPointer)(int a, int b);
Run Code Online (Sandbox Code Playgroud)

这是有效的,您可以通过致电验证

int res = funcPointer(3,4);
Run Code Online (Sandbox Code Playgroud)

然后返回

int func(int a, int b){
    return a+b;
}
Run Code Online (Sandbox Code Playgroud)