c语言关于括号的问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 20:20:38
if ( events != 0 )
{
// Call the task to process the event(s)
if ( activeTask->pfnEventProcessor )
{
retEvents = (activeTask->pfnEventProcessor)( activeTask->taskID, events );

// Add back unprocessed events to the current task
HAL_ENTER_CRITICAL_SECTION(intState);
activeTask->events |= retEvents;
HAL_EXIT_CRITICAL_SECTION(intState);

activity = true;
}
}
(76249477) 18:40:51
这是完整代码。其中一条是retEvents = (activeTask->pfnEventProcessor)( activeTask->taskID, events );
请问retEvents 等于那个值.
typedef unsigned short (*pTaskEventHandlerFn)( unsigned char task_id, unsigned short event );
这是在前边定义的.
pTaskEventHandlerFn pfnEventProcessor;
后边又定义pfnEventProcessor成pTaskEventHandlerFn的类型变量.下边才是刚才的具体应用.那么pTaskEventHandlerFn是个函数呢,还是类型名.

//举个例子
int add(int x, int y)
{
return x+y;
}

int _tmain(int argc, _TCHAR* argv[])
{
typedef int (*pfn)(int a, int b);//定义一个函数指针类型,pfn是一种函数指针类型。
pfn fn1;//定义这个函数指针类型的变量,fn1是一个函数指针。
fn1 = add;//用函数名给这个函数指针赋值
cout << (*fn1)(3, 7) << endl;
}

pfnEventProcessor类似于fn1,是一个函数指针。
if (activeTask->pfnEventProcessor)//表示函数指针不为空,就是被赋值了,存了一个函数名。
{
retEvents = (activeTask->pfnEventProcessor)( activeTask->taskID, events ); //这个语句我认为有问题
//是不是
//retEvents = *(activeTask->pfnEventProcessor)( activeTask->taskID, events );
}

retEvents = (activeTask->pfnEventProcessor)( activeTask->taskID, events );
这句把前面的括号去掉也可以把,
activeTask->pfnEventProcessor应该是一个函数(或者叫方法),
要不就是一个函数指针

一看就知道是函数指针,匈牙利命名法,前缀的意义可以看出来
p指针
fn函数
retEvents是函数指针activeTask->pfnEventProcessor给予实参( activeTask->taskID, events )的运行结果

光从 语法上看应该是强制类型转换