| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 695 人关注过本帖
标题:指针函数的结构体指针参数,如何优雅的适配不同结构体类型
只看楼主 加入收藏
szchen2018
Rank: 2
等 级:论坛游民
帖 子:39
专家分:21
注 册:2021-11-20
结帖率:91.67%
收藏
已结贴  问题点数:20 回复次数:3 
指针函数的结构体指针参数,如何优雅的适配不同结构体类型
typedef struct
{
    uint8_t reg;        
    uint32_t data;
}COEFFICIENT_STRUCT;

typedef struct{
    uint8_t command;
    uint8_t param;
} cfg_reg;

typedef struct{
    uint8 Address;
    uint8 Top_data;
    uint8 Middle_data;
    uint8 Botton_data;
}RAM1_TAB;

typedef struct{
    BYTE Address;
    BYTE First_data;
    BYTE Top_data;
    BYTE Middle_data;
    BYTE Botton_data;
}RAM2_TAB;

上面四个结构体,会定义成结构体数组,现在每次选用不同的器件要打开相应宏定义,而且每增加一个器件又要增加宏定义、指针函数,很麻烦和不好看。
#define AMP_1
//#define AMP_2
//#define AMP_3
//#define AMP_4

#ifdef AMP_1
typedef int (*ampop_ctrl)( AmpList *pstAmpList, const COEFFICIENT_STRUCT *reg, int n);
#elif defined (AMP_2)
typedef int (*ampop_ctrl)( AmpList *pstAmpList, const cfg_reg *reg, int n);
#elif defined (AMP_3)
typedef int (*ampop_ctrl)( AmpList *pstAmpList, const RAM1_TAB *reg, int n);
#elif defined (AMP_4)
typedef int (*ampop_ctrl)( AmpList *pstAmpList, const RAM2_TAB *reg, int n);
#endif
搜索更多相关主题的帖子: int typedef 指针 BYTE 结构体 
2022-07-26 11:38
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:15 
看不懂你的需求是什么,但如果是我来写的话,我会将

程序代码:
#if defined(AMP_1)
typedef struct {
    uint8_t reg;        
    uint32_t data;
} RAM_TAB;
#elif defined(AMP_2)
typedef struct {
    uint8_t command;
    uint8_t param;
} RAM_TAB;
#elif defined(AMP_3)
typedef struct {
    uint8 Address;
    uint8 Top_data;
    uint8 Middle_data;
    uint8 Botton_data;
} RAM_TAB;
#elif defined(AMP_4)
typedef struct {
    BYTE Address;
    BYTE First_data;
    BYTE Top_data;
    BYTE Middle_data;
    BYTE Botton_data;
} RAM_TAB;
#endif
typedef int (*ampop_ctrl)( AmpList *pstAmpList, const RAM_TAB *reg, int n );

存为一个头文件,比如 amp.h

然后在需要的地方
#define AMP_1
#incude "amp.h"
2022-07-26 14:49
szchen2018
Rank: 2
等 级:论坛游民
帖 子:39
专家分:21
注 册:2021-11-20
收藏
得分:0 
回复 2楼 rjsp
我的需求是typedef int (*ampop_ctrl)( AmpList *pstAmpList, const RAM_TAB *reg, int n )不用定义多个,结构体也不用定义多个,看来只能做到前者,感谢回答
2022-07-26 15:10
lwei
Rank: 5Rank: 5
等 级:职业侠客
威 望:3
帖 子:197
专家分:369
注 册:2005-5-4
收藏
得分:5 
union能不能解决这个问题?

2022-07-30 16:45
快速回复:指针函数的结构体指针参数,如何优雅的适配不同结构体类型
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017782 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved