小编kei*_*ney的帖子

函数指针强制转换为 void 而不被调用

在细读一些 STM32 中间件代码时,我遇到了这个非常奇怪的行并且无法解析它。基本上就是,

(void)(foo);
Run Code Online (Sandbox Code Playgroud)

这不是空指针转换 - 这很简单。它不是调用函数并将其返回值转换为 void - 这将需要更多的括号。它看起来像一个没有左值的右值。这只是防止功能被优化掉的空操作吗?或者它实际上有什么作用?

这是在上下文中。

// SVCCTL_EvtAckStatus_t is just an enum typedef

typedef SVCCTL_EvtAckStatus_t (*SVC_CTL_p_EvtHandler_t)(void *p_evt);

void SVCCTL_RegisterCltHandler( SVC_CTL_p_EvtHandler_t pfBLE_SVC_Client_Event_Handler )
{
#if (BLE_CFG_CLT_MAX_NBR_CB > 0)
  // Ignore all this
  SVCCTL_CltHandler.SVCCTL_CltHandlerTable[SVCCTL_CltHandler.NbreOfRegisteredHandler] = pfBLE_SVC_Client_Event_Handler;
  SVCCTL_CltHandler.NbreOfRegisteredHandler++;
#else
  // This is the weird stuff
  (void)(pfBLE_SVC_Client_Event_Handler);
#endif

  return;
}

Run Code Online (Sandbox Code Playgroud)

c embedded syntax compiler-optimization

2
推荐指数
1
解决办法
76
查看次数

标签 统计

c ×1

compiler-optimization ×1

embedded ×1

syntax ×1