请教傻孩子:ICC7.22程序中不要用函数指针……有跑飞风险,已经确认是编译器BUG
用ICC7.22……本论坛有下载,安装版本,非内存补丁破解……BTW,程序中不要用函数指针……有跑飞风险,已经确认是编译器BUG。
*****但是我用ICC7.22编译程序,而且程序中也使用了函数指针,但是没有跑飞,但是很担心。以下是代码:
1、函数结构体指针定义
typedef struct tagMALFUNCTION_STRUCT
{
INT16S *AC_Lo;
INT16S *DC_Lo;
INT16S *DC_Hi;
INT16S (*DC_PROC)(INT16S set_alarm);
INT16S (*AC_PROC)(INT16S set_alarm);
} MALFUNCTION_STRUCT , *MALFUNCTION_STRUCT_PTR;
2、函数结构体指针初始化代码
void MALFUNCTION_STRUCT_Init(void)
{
MALFUNCTION_STRUCT_PTR pM;
pM = MALFUNCTION_ADDR_POINTER(enum_CHA_TYPE);
pM->AC_Lo = &ad_buffer;
pM->DC_Lo = &ad_buffer;
pM->DC_Hi = &ad_buffer;
pM->DC_PROC = SPEED_DC_OK;
pM->AC_PROC = SPEED_AC_OK;
pM = MALFUNCTION_ADDR_POINTER(enum_CHB_TYPE);
pM->AC_Lo = &ad_buffer;
pM->DC_Lo = &ad_buffer;
pM->DC_Hi = &ad_buffer;
pM->DC_PROC = SPEED_DC_OK;
pM->AC_PROC = SPEED_AC_OK;
}
3、函数指针执行代码
for (i = enum_CHA_TYPE ; i <= enum_CHB_TYPE ; i++)
{
pM = MALFUNCTION_ADDR_POINTER(i);
switch (i)
{
case enum_CHA_TYPE:
if (pM->DC_PROC(*pM->DC_Lo) < set_buffer)
pi_err = TRUE;
else
pi_err = FALSE;
break;
case enum_CHB_TYPE:
if (pM->DC_PROC(*pM->DC_Lo) < set_buffer)
pi_err = TRUE;
else
pi_err = FALSE;
break;
}
} 有一个很大的工程,暂时无法给你,因为牵涉到商业机密,等我完成了这个项目,我会集中精力来找出原因。
问题似乎和栈有一定关系。 希望傻孩子得到最终结论。
ICC7.22用函数指针,是否有跑飞风险!!!
页:
[1]