typedef int (xxx)(int yyy);表示使用整数参数定义一个名为xxx的函数.你可以看到这篇SO帖子了解详情.
我用不同的方式试过这个,那就是我的代码:
#include<stdio.h>
#include<stdlib.h>
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));
}
Run Code Online (Sandbox Code Playgroud)
输出:
f1:4199274
f1:2
f2:4199274
f2:2
xxx's size:1
Run Code Online (Sandbox Code Playgroud)
我的问题:
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.需要输入错误消息.
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |