知道typedef的一般用法
比如:typedef unsigned long ACCOUNT
可是
typedef int CALLBACK (*pfshowProgress)(int Progress);这是怎么断句来解释的呢?我知道这个是用来声明一个函数指针
昨天的朋友都没有告诉我具体的断句方法
怎样具体的去看这句话
int CALLBACK 是什么意思?我知道是回调函数,但回调函数不是只要CALLBACK就可以了吗?为什么还要前面加 int?是指整形的回调函数吗?
后面两个括号里面是两个什么东西?根本就没有明白。
*pfshowProgress是什么指针啊?既然它已经是函数指针了,那 int Progress 又是什么?这里究竟声明了几个函数指针啊?还是声明了两个callback函数 一个是指针型,一个是整形,还是其它的什么意思?
我是指概念上的明白,而不是就这一句话的意思。
能不能说得详细一点啊?比如用中括号的形式把这句话的句子结构标明一下:
[typedef]  [long]   [LONG]  a          b        c
其中 a 是关键字 b是长整形数   c 是要替换字符串"long"的字符串这样我才能明白啊
光说声明一个回调函数,那就不用来问了。我也知道啊。可是,为什么这么写才可以声明呢?
如果你那么有毅力读完了这段话,也许你已经累了。
换换思路,帮我写这个断句吧。
谢谢。

解决方案 »

  1.   


       typedef int CALLBACK (*pfshowProgress)(int Progress);
       定义了一个函数指针类型pfshowProgress
       这个函数指针指向这样的函数:返回值类型是int,有一个int类的参数,而且是回调函数
       以后可以这样使用函数指针类型pfshowProgress:
       
       CALLBACK int ShowProgress(int p)
       {
         
       }
       
       int  p = 5;
       pfshowProgress  pfn;
       pfn = ShowProgress;
       pfn(5);
       参数类型是重要的,参数名无所谓。给你个简单的例子:
    #include <stdio.h>
    typedef int (*pfnFunc)(int,int);int Add(int a,int b)
    {
    return a + b;
    }int main(int argc, char* argv[])
    {
    pfnFunc p; p = Add;
    printf("3 + 5 = %d\n",p(3,5));
    return 0;
    }
      

  2.   

    这样断:
    中心词是pfshowProgress:下面一步步来:
    *pfshowProgress//说明这是一个指针.
    (*pfshowProgress)//说明这是一个函数指针.
    (*pfshowProgress)(int Progress);//此函数指针指向一个函数,该函数的参数是int Progress.
    int CALLBACK (*pfshowProgress)(int Progress);//该函数是CALLBACK类型的,并且其返回值类型是int
    //其实这种函数挺多的,类似的有windows中的消息映射函数,比如:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
      

  3.   

    typedef int CALLBACK (*pfshowProgress)(int Progress);int 是返回类型
    CALLBACK 是参数压栈规则(关于这个,请到基础类搜索“回调”的帖子)
    (*pfshowProgress) 是函数指针类型名
    (int Progress) 是参数类型可能这么说还有点模糊,参看相应的函数的声明形式:
    int CALLBACK MyCallBack (int Progress)
    {
    ...
    }
      

  4.   

    typedef       int             CALLBACK          (*pfshowProgress) (int Progress);
                 函数返回类型     声明为回调函数     函数指针         函数参数列表