typedef 向前声明_C语言如何进行前置声明

本文探讨了在C语言中遇到的typedef前置声明问题,特别是在定义结构体时的交叉引用。通过示例展示了如何在C语言中正确进行typedef结构体和回调函数声明,以避免编译错误。同时,提到了C++中使用struct指针类型的前置声明方式与C语言的区别,并提供了详细的解决方案。
摘要由CSDN通过智能技术生成

今天在给予ftk的button实现一个新的控件。

在定义该结构是遇到C语言的前置声明的问题。C语言的前置声明的如下:

-----

如下列子:

0818b9ca8b590ca3270a3433284dd417.png

typedef BOOL (

*

func)(

const

DefStruct

*

struct

);

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngtypedef

struct

DefStruct_t

0818b9ca8b590ca3270a3433284dd417.png

{

0818b9ca8b590ca3270a3433284dd417.pnginti;

0818b9ca8b590ca3270a3433284dd417.png    func f;

0818b9ca8b590ca3270a3433284dd417.png}

DefStruct;

如上定义了一个回调函数声明,然后在后面的struct中使用这个回调函数声明。这样交叉引用必然编译不过,在C++中,由于是使用struct的指针类型,进行前置声明即可,但C中该如何实现呢?

key:

typedef struct DefStruct DefStruct;

typedef BOOL (*func)(const DefStruct* s);

struct DefStruct

{

int i;

func f;

};

这是tag在C和C++中的区别造成的问题。

更详细的,见这里:

http://www.embedded.com/9900748

我自己的定义的类型如下:

----------------------------------

typedef struct FtkBtnexPara FtkBtnexPara;

typedef struct

{

struct ftkBtnexitem * btn;

int num;

}user_cfg_table;

struct FtkBtnexPara

{

const char *name;

int mode;

char * tips;

union

{

struct {

const char **list;

int list_count;

}list;

struct {

//VAR mode;

const char **default_value;

int   readonly;

int (*handle_data)( const char * str);

}var;

struct {

//Normal mode

char **  sub_menu;

user_cfg_table * cfg_table;

}normal;

}u;

---------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值