当前位置:网站首页>一种奇怪的函数声明写法
一种奇怪的函数声明写法
2022-08-10 05:39:00 【KumaNPC】
typedef定义函数类型的函数声明写法
最近网友遇到个问题:
typedef void(FunType)(int);
FunType a;
这种写法,a是的什么东西,可以编译通过,用gcc测试输出a,结果是1。
但是msvc,尝试输出a时会报错,int a(int,int)无法解析的外部符号之类的。
还好msvc的错误比较明确,既然是a的链接出了问题,尝试在别处写个定义:
void a(int){
}
编译通过,msvc输出变成了函数地址。
结论
通常都是定义函数指针类型:
typedef void(*FunPtr)(int);
FunPtr a = someFunction;
// 或者
typedef void(FunType)(int);
FunType * a = someFunction;
实际FunType a,就是一条声明语句,声明一个函数名是a且返回类型和参数类型跟FunType一致的函数。此时等同于
void a(int);
其实参照通常我们 “定义” 变量的时候的写法:int a; 对应的FunType a; 就比较好理解,就是一句函数声明。
能想到的用途是,如果代码里有很多相同返回类型和参数和参数列表的函数,使用的时候需要提前声明,可以预先定义一个函数类型,
再通过FunType funcName; 的方式声明,少写代码。
边栏推荐
- 剑指 Offer(第 2 版)7/6 9-13
- unity守则(随时持续更新\自我总结)
- Unity扩展编辑器EditorWindow 小玩意(二)
- Unity screen coordinates to world coordinates, mouse click to get 3D position
- 浅谈游戏中3种常用阴影渲染技术(3):阴影贴图
- Unity插件DOTween使用指南2(简释贝塞尔曲线)
- Unity的GetComponentsInChildren1、2、3
- 废水中氟离子去除方法
- Unity扩展编辑器EditorWindow 小玩意(一)
- UnityShader入门精要-立方体纹理、反射、折射、菲涅尔反射
猜你喜欢
随机推荐
OSPF的dr和bdr
新手使用 go channel 需要注意的问题
废水中氟离子去除方法
Mysql表数据在命令行窗口下中文乱码问题解决方法
A*Pathfinding插件(3D)
Introduction to KDE Framework
NetKeeper(创翼)开WIFI方法——2018.5
npm搭建私服,上传下载包
UnityShader入门精要-基础纹理
UE 游戏模式
Unity plug-in DOTween User Guide 2 (Brief explanation of Bezier curves)
制作一个启动软盘并用bochs模拟器启动
Talking about the realization idea of "frame" of "frame synchronization online game"
markdown类图学习
mkfs.minix.c之minix_super_block.s_nzones获取解析
webSocket教程
网页安全证书错误但无法安装证书的解决办法
驱动的参数传入:module_param,module_param_array,module_param_cb
Simplest character device driver
优先级队列,大小顶堆PriorityQueue