这个赋值是多余的,这个对象的值在被修改之前从不使用|MISRA_2012 QAC,消息标识符2982

u3r8eeie  于 2023-11-17  发布在  其他
关注(0)|答案(2)|浏览(91)

我正在低于MISRA QAC警告。
此赋值是多余的。此对象的值在被修改之前从不使用。MISRA_2012,QAC,消息标识符:2982
我试图修改变量的本地状态为特定的错误值。
验证码:

FUNC(void, RTE_CODE) Rte_Server_S_service_exteriorLighting_UI_unsubscribeExteriorLightSettings (ExteriorLightingUI_unsubscribeExteriorLightSettings_subscriptionId_type subscriptionId, P2CONST(uint8, AUTOMATIC, RTE_APPL_DATA) consumerId, P2VAR(ExteriorLightingUI_AT_SubscriptionStatus, AUTOMATIC, RTE_APPL_DATA) status)
{
  uint16 localStatus;
  TS_MemSet(&localStatus, 0u, sizeof(localStatus));
  uint8 conId;
  uint8 isSubIdFound = COMH_FALSE;
  
  if(subscriptionId == COMH_SUBSCRIPTION_TO_ALL)
  {
      conId = SubAll_ES_is_validate_ConsumerId(consumerId); //function call 
      if(conId < 2u)
      {
          localStatus = (uint16) COMH_SOMEIP_SUBSCRIPTION_CANCELLED;
          isSubIdFound = COMH_TRUE;
      }
      else
      {
          localStatus = (uint16) COMH_SOMEIP_SUBSCRIPTION_ERROR;
      }
  }
  else
  {
    localStatus = (uint16) COMH_SOMEIP_SUBSCRIPTION_ERROR;
  }

  if(isSubIdFound ==  COMH_FALSE)
  {
        localStatus = (uint16) COMH_SOMEIP_SUBSCRIPTION_TARGET_DELETED;
  }

  /* fill response buffer of SOMEIP method */
  TS_MemCpy(status, &localStatus, sizeof(localStatus));
}

字符串
在此语句之前,我使用memset来填充localStatus中的0值。
在此语句之后,我使用memcpy来填充localStatus中的相关错误代码。

y0u0uwnf

y0u0uwnf1#

很有可能是TS_MemCpy(status, &localStatus, sizeof(localStatus));,应该是&status。如果是这样,这应该不仅仅是MISRA违规,而是C编译器错误。
也可能有其他原因:静态分析器可能无法解析这些不同的函数,因为你是逐个文件运行它的,而不是一次在整个项目中运行它。静态分析器在向函数传递未初始化的变量时往往会发出抱怨,但这在大多数情况下都是误报。
或者,如果静态分析器真的很聪明,它会告诉你这些函数调用只是废话,这可能是真的。我不知道这些函数做什么,但代码看起来很可疑。你可能有一些合理的理由调用它们(原子访问?符合MISRA标准库?),但通常对于普通的uint16_t,你应该简单地做:

localStatus = (uint16_t) ERROR; // cast is only required if ERROR is an enum etc
status = localStatus;

字符串

wdebmtf2

wdebmtf22#

我不确定代码中是否有什么错误,但是如果你用COMH_SOMEIP_SUBSCRIPTION_TARGET_DELETED替换COMH_SOMEIP_SUBSCRIPTION_ERRORlocalStatus的赋值,你可以删除isSubIdFound周围的所有内容。
你可以这样做,因为最后一次对localStatus的赋值是多余的。
所以我想说你的MISRA检查员是对的。

相关问题