最近在看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自定义函数指针类型:
看一个例子:
03 | typedef int (*fp_t)( char c); |
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;} |
14 | ret = fp( 'a' );通过函数指针调用函数 |
2,typedef自定义函数类型:
例子:
03 | typedef int f_t( char c); |
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;} |