这可能是参考手册或教科书上对函数的说明,[]一般指这个部分是可选的,在实际的程序中是不会出现的,其实[]作为可选参数是大多数参考手册和教科书上的惯用法,不只是在C/C++语言中,现在再拿这个声明来说(假设使用这个可选参数):
void ( *signal( int sig, void (__cdecl *func) ( int sig , int subcode )) ) ( int sig );
void (__cdecl *func) ( int sig , int subcode )是一个函数指针,接受两个整型参数,无返回值,传参数和清理栈的方式是cdecl,即从右向左压入参数,调用者清栈
为了方便理解,我们把这个函数指针定义为一个自定义数据类型:
typedef void (__cdecl *pFunc) ( int sig , int subcode );
现在,原来的声明可以简化为:
void ( *signal( int sig, pFunc) ) ( int sig );
这样看来*signal( int sig, pFunc)部分是一个函数指针,这个指针指向的函数有一个整型参数,无返回值.由此可以知道这个函数指针是由signal函数返回的,而signal函数的参数有两个,一个是整型,另一个就是上面我们定义的pFunc,即另一个函数指针.