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

时间:2015-01-08 08:14:03

标签: c visual-c++ gcc function-pointers 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;
}

这种行为是否定义明确,或者它是非标准的,并且函数指针类型具有命名参数(即名称以及参数列表中的类型)实际上是非法的吗?

3 个答案:

答案 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中的bfuncPointer名称不会用于任何内容,但允许使用。你可以使用你想要的任何(合法)名称,它们根本不重要。

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