当前位置:网站首页>一种奇怪的函数声明写法
一种奇怪的函数声明写法
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; 的方式声明,少写代码。
边栏推荐
猜你喜欢
随机推荐
The use of pointers from the exchange of two data values (C language implementation)
Talking about 3 common shadow rendering techniques in games (1): plane shadow
ArgumentException: GetComponent requires that the requested component ‘GameObject‘ derives from Mono
探究乱码问题的本源:GBK,UTF8,UTF16,UTF8BOM,ASN1之间的关联
UnityShader入门精要--Unity中的基础光照
OpenGL学习笔记(LearnOpenGL)-第三部分 绘制矩形
剑指 Offer(第 2 版)7/6 9-13
unity守则(随时持续更新\自我总结)
虚幻5简单第三人称游戏制作文档
Mysql表数据在命令行窗口下中文乱码问题解决方法
Ingress Controller performance test(1)
浅谈游戏中3种常用阴影渲染技术(2):阴影锥
Unity血条跟随对象
Basic use of Unity's navigation and wayfinding system
Myunity框架笔记
Myunity框架笔记3
Unity2D动画生成操作(简单)
观察者模式-数据池
QEMU guest与host通过网络通信——bridge/hostfwd/guestfwd
How is C# hot update better than Lua?









