搜索
bottom↓
回复: 10

大家怎么理解这段程序

[复制链接]

出0入0汤圆

发表于 2009-11-4 13:12:47 | 显示全部楼层 |阅读模式
-------------摘自 freemodbus-v1.4.0\modbus\include\mbproto.c-----------------
    typedef enum
{
    MB_EX_NONE = 0x00,
    MB_EX_ILLEGAL_FUNCTION = 0x01,
    MB_EX_ILLEGAL_DATA_ADDRESS = 0x02,
    MB_EX_ILLEGAL_DATA_VALUE = 0x03,
    MB_EX_SLAVE_DEVICE_FAILURE = 0x04,
    MB_EX_ACKNOWLEDGE = 0x05,
    MB_EX_SLAVE_BUSY = 0x06,
    MB_EX_MEMORY_PARITY_ERROR = 0x08,
    MB_EX_GATEWAY_PATH_FAILED = 0x0A,
    MB_EX_GATEWAY_TGT_FAILED = 0x0B
} eMBException;

typedef   eMBException( *pxMBFunctionHandler) ( UCHAR * pucFrame, USHORT * pusLength );
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


typedef struct
{
    UCHAR           ucFunctionCode;
    pxMBFunctionHandler pxHandler;
} xMBFunctionHandler;
------------------完毕--------------------------
其他的都好理解
就是画破浪线的不太好理解
我认为是定义了一个返回值为 eMBException 的函数指针 该函数指针名为pxMBFunctionHandler
所指向的函数需要两个参数UCHAR * pucFrame和 USHORT * pusLength

老感觉不大对,但又说不清楚为什么?
大家怎么理解的?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2009-11-4 14:21:12 | 显示全部楼层
愚见,我认为也是这个意思。

出0入0汤圆

发表于 2009-11-4 15:27:06 | 显示全部楼层
同意楼上的,是定义函数指针,是不是应该这样写?
typedef   eMBException( *pxMBFunctionHandler) ( UCHAR * , USHORT * );

出0入0汤圆

发表于 2009-11-4 16:46:24 | 显示全部楼层
pxMBFunctionHandler 是类型了,不是具体指针名。
如同下面的例子
typedef void* PVOID;

PVOID p;

p才是指针,PVOID是类型

出0入0汤圆

 楼主| 发表于 2009-11-5 07:54:24 | 显示全部楼层
我在网上找的typedef的用法:

typedef char INT8;

char 是定义前的名字
INT8是定义后的名字

那么 程序
typedef   eMBException( *pxMBFunctionHandler) ( UCHAR * pucFrame, USHORT * pusLength ); 中

如果按照我顶楼的理解
谁是定义前的名字?
谁是定义后的名字?

出0入0汤圆

发表于 2010-7-20 20:27:59 | 显示全部楼层
LZ的理解无误.

出0入0汤圆

发表于 2010-7-20 21:14:12 | 显示全部楼层
回复【4楼】xcodes
-----------------------------------------------------------------------

eMBException( *pxMBFunctionHandler) ( UCHAR * pucFrame, USHORT * pusLength );
是定义了一个指向函数的指针变量  pxMBFunctionHandler;
而在这之前加了 typedef 关键字,则定时了可以定义这样一种变量的新类型名:"pxMBFunctionHandler"
因此, 要定义新的函数指针变量,则只要“ pxMBFunctionHandler p; ”即可,p即是指向此类函数的新指针变量;

出0入0汤圆

发表于 2010-11-30 20:01:20 | 显示全部楼层
再听听高见

出0入0汤圆

发表于 2012-9-6 20:26:02 | 显示全部楼层
xcodes 发表于 2009-11-5 07:54
我在网上找的typedef的用法:

typedef char INT8;

你查到的东西是对的,可是你只看了一半,你可以看百度百科,typedef还可以定义函数指针,我最近也是初学这个,一起交流···

出0入0汤圆

发表于 2014-5-9 20:34:33 | 显示全部楼层
看老外Brain W.Kernighhan的一本书<C程序设计语言>.里面对typedef介绍很详细。楼主理解不透彻。估计是被老谭的那个C语言害得。
typedef int (*PF) (const char *, const char *);
定义了一个函数指针类型PF,PF是类型;定义的函数有两个参数分别为const char *, const char *;返回值是int

出0入0汤圆

发表于 2014-5-10 06:24:20 | 显示全部楼层
这个是freemodbus的源码吧 我最近也在搞 不知在winavr20100110里怎么编译他的demo
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-3 11:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表