使用typedef定义函数类型和函数指针
- 定义函数类型(例子)
typedef int (FuncType)(int, int);
- 定义函数指针类型(例子)
typedef int (*pFuncType)(int, int);
使用函数类型的时候有一个注意的地方,如下面的程序
定义了一个函数变量func,编译的时候出错,赋值的时候等号左边必须是左值。
纳尼???
func居然不是左值,那么func到底是什么?
通过思考猜测:func也是个变量,但是func是一个用const修饰的变量,因此只能在定义的时候给func赋值一次。更改程序如下:
还是不行。
结论:通过FuncType func这样的定义方式,func不能赋值,不能初始化。
根据错误提示,可知这样定义func相当于声明了一个int func(int, int),但是没有函数实现。
所以这像什么呢?
这像声明!!!
做下面的实验。
我们知道,当调用的函数在调用位置之后定义时,如果调用之前没有声明就会编译出错,函数没有声明。通常的解决方法如下:
在前面添加了声明后,就可以正常编译运行了。
重点来了
我们还可以用另外一种方式进行声明!!!如下:
我的天,还是失败了。但是错误提示很关键,说明FuncType不能对static函数进行声明,那么我们去掉看看。
哈哈哈哈,真的成功了。
虽然成功了,但是这个例子真的很蠢,不知道这样有什么用。
所以,如果定义了函数类型不要FuncType func这样定义变量,它只能用来声明同名的非static函数用。请使用下面的方式定义变量:定义一个指针变量。
如果是这样,我们不如直接定义一个函数指针类型: