typedef函数作为另一个函数的参数

typedef int (xxx)(int yyy); 表示使用整数参数定义一个名为xxx的函数。 你可以看到这篇SOpost了解详情。

我用不同的方式试过这个,那就是我的代码:

 #include #include typedef int (xxx)(int yyy); void f1(xxx a) { printf("f1:%d\n",a); } void f2(xxx *a) { printf("f2:%d\n",a); } int test(int y) { } int main() { xxx *a; f1(test); f1(a); f2(test); f2(a); xxx b; printf("xxx's size:%d\n", sizeof(b)); } 

输出:

 f1:4199274 f1:2 f2:4199274 f2:2 xxx's size:1 

我的问题:

  1. f(xxx a)f(xxx *a)
  2. sizeof(someFunction)是否已定义?

意味着定义一个名为xxx的函数

它定义了一个函数类型

f(xxx a)与f(xxx * a)相同?

是。 但这有点像语言中的黑客。 这颗星很适合你,因为它不见了。

sizeof(someFunction)是否已定义?

具体而言,不是。 您可以使用汇编语言,或者通过使用关于程序如何链接的深入知识来执行此操作,但它对C没有语义含义。除了间接跳转之外,函数甚至不需要可寻址,因为C支持哈佛架构机器。 (另请注意,具有相同类型的两个函数通常具有不同的大小,因为大小由其指令的数量和性质决定。)

C11 6.3.2.1/4说

函数指示符是具有函数类型的表达式。 除非它是sizeof运算符的操作数,…具有类型”函数返回类型”的函数指示符将转换为具有类型”指向函数返回类型’的指针的表达式。

和6.5.3.4/1说

sizeof运算符不应用于具有函数类型的表达式…

您的编译器似乎无法应用6.3.2.1/4。 需要输入错误消息。