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
我的问题:
-
f(xxx a)
与f(xxx *a)
? -
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。 需要输入错误消息。