回 帖 发 新 帖 刷新版面

主题:typedef简化声明

int (*Register (int (*pf)(const char *, const char *)))(const char *, const char *);
如何用typedef进行简化。
详细过程...

回复列表 (共3个回复)

沙发

typedef int (*PF)( const char*, const char* );
PF Register( PF pf );

板凳

这个声明看了眼晕

3 楼

一看开头 int (*Register (  就应该可以知道这是一个函数,返回另一个函数指针。

接着有2中思路来考虑:从函数Register的返回值 和 参数 分别来考虑这个函数.
拿 从返回值的角度来考虑 来举例:
  把 *Register (int (*pf)(const char *, const char *)) 看着一个整体,用foo表示,
  那么原来的声明可以写成   int foo (const char *, const char *);
  也就是说,Register函数的返回值 是一个指向 foo类型函数的指针。这样有

typedef int (*PF)  (const char *, const char *);

  于是,Register可以化简为 PF Register ( int (*pf) (const char *, const char *) );

  很显然,Register 函数的参数也是一个函数指针.类型是 int (*) (const char *, const char * );
  而这个函数指针和PF的类型刚好一样,故总体来讲,可以把Register写成这样:
    PF Register (PF);

我来回复

您尚未登录,请登录后再回复。点此登录或注册