typedef 定义函数类型
最近在看posix实时信号时,遇到一处函数是如此定义的:
1
typedef
void
sigfunc_rt(
int
, siginfo_t *,
void
*);
在我常规理解里,一般定义一个函数类型都是这样定义的:1
typedef
void
(*sighandler_t)(
int
);
2
sighandler_t
signal
(
int
signum, sighandler_t handler);
其实是这样的,对于函数,typedef有两类自定义类型:首先我们要先明白一个概念,函数名是不是指针?也就是说一个函数名可不可以代表一个地址?以及什么是函数类型?
经过查找,函数名就是一个指针,但是意义是不一样的,如同于数组a[],a和&a其实都是一样的。当调用一个函数时,我们都是直接用函数名调用,或者说通过指针调用。
函数类型,在我理解,就是定义了一个函数返回值类型以及参数类型。
那么:
1,tpyedef自定义函数指针类型:
看一个例子:
01
#include <stdio.h>
02
03
typedef
int
(*fp_t)(
char
c);
04
05
int
f0(
char
c) {
printf
(
"f0, c = %c\n"
, c);
return
0;}
06
int
f1(
char
c) {
printf
(
"f1, c = %c\n"
, c);
return
1;}
07
08
int
main()
09
{
10
int
ret;
11
fp_t fp;
//fp是一个指向一个函数类型(返回的是int,参数是char)的函数指针
12
13
fp = f0;
14
ret = fp(
'a'
);通过函数指针调用函数
15
16
fp = f1;
17
ret = fp(
'x'
);
18
return
0;
19
}
2,typedef自定义函数类型:
例子:
view sourceprint?01
#include <stdio.h>
02
03
typedef
int
f_t(
char
c);
04
05
int
f0(
char
c) {
printf
(
"f0, c = %c\n"
, c);
return
0;}
06
int
f1(
char
c) {
printf
(
"f1, c = %c\n"
, c);
return
1;}
07
08
int
main()
09
{
10
int
ret;
11
f_t *fp;
//f_t是函数类型,所以fp是指向此函数类型的指针
12
13
fp = f0;
14
ret = fp(
'a'
);
15
16
fp = f1;
17
ret = fp(
'x'
);
//函数指针调用此函数
18
return
0;
19
}