|
用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[3];
pM->DC_Lo = &ad_buffer[2];
pM->DC_Hi = &ad_buffer[2];
pM->DC_PROC = SPEED_DC_OK;
pM->AC_PROC = SPEED_AC_OK;
pM = MALFUNCTION_ADDR_POINTER(enum_CHB_TYPE);
pM->AC_Lo = &ad_buffer[5];
pM->DC_Lo = &ad_buffer[4];
pM->DC_Hi = &ad_buffer[4];
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[L_DC_1_NO-1])
pi_err[4] = TRUE;
else
pi_err[4] = FALSE;
break;
case enum_CHB_TYPE:
if (pM->DC_PROC(*pM->DC_Lo) < set_buffer[L_DC_2_NO-1])
pi_err[7] = TRUE;
else
pi_err[7] = FALSE;
break;
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|