今天在给予ftk的button实现一个新的控件。
在定义该结构是遇到C语言的前置声明的问题。C语言的前置声明的如下:
-----
如下列子:
typedef BOOL (
*
func)(
const
DefStruct
*
struct
);
typedef
struct
DefStruct_t
{
inti;
func f;
}
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;
---------------------