|
发表于 2014-7-10 22:59:52
|
显示全部楼层
本帖最后由 qiao_zlj 于 2014-7-10 23:01 编辑
#define Function(address) (*(function)address)()
第一次见这么用~感觉好像是对的~
但是这么用感觉不好~容易有歧义~
address必须是地址(函数名),
下面是以前用过的一个函数指针的例子:
struct STRING_ITEM{
char str[10];
unsigned short color;
};
struct MENU_ITEM{
struct STRING_ITEM message;
void (*key_func)(unsigned char);
struct STRING_ITEM *element;
struct STRING_ITEM *value;
};
static void ch1_menu_key_func(unsigned char code)
{
switch(code)
{
case KEY_SEL1:
if(ch_couple_get(CH1_COUPLE) == AC_COUPLING)
{
sprintf(ch1_e_value[0].str,"直流");
ch_couple_set(CH1_COUPLE,DC_COUPLING);
}
else
{
sprintf(ch1_e_value[0].str,"交流");
ch_couple_set(CH1_COUPLE,AC_COUPLING);
}
break;
case KEY_SEL2:
break;
case KEY_SEL3:
break;
case KEY_SEL4:
break;
case KEY_SEL5:break;
default:break;
}
}
struct MENU_ITEM ch1_menu = {
{"CH1",CH1_COULOR},//struct STRING_ITEM message;
ch1_menu_key_func,//void (*key_func)(unsigned char);
&ch1_ele,//struct STRING_ITEM *ele;
&ch1_e_value//struct STRING_ITEM *e_value;
};
current_menu->key_func(key_code);//这是那个函数的调用方式
//如果这么用
//typedef void (*function)(unsigned char);
//结构体里可以写成
//function key_func;
//这里的function表示所定义的函数指针的形参与返回值的组成方式 |
|