如何在编译警告时解决函数的弃用声明?

时间:2017-03-17 08:50:19

标签: c embedded compiler-warnings keil

我有3个文件依赖项,其中一个我实现了一个函数,你可以在下面看到它。它返回32位的int类型。第二个文件实现了一个调用第一个文件功能的函数。将从主文件(第三个文件)调用此函数。 当我编译(使用keil IDE)所有文件时,我有以下警告信息:

compiling App_Task_CAN.c...
..\src\Application_Tasks\App_Task_CAN.h(132): warning:  #1295-D: Deprecated      declaration App_Task_CAN_GetError - give arg types
  uint32_t App_Task_CAN_GetError();

这是我包含的文件中的代码的一部分stm32l4xx_hal_can.c:

 uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan)
 {
      return hcan->ErrorCode;
 }

其中hcan在stm32l4xx_hal_can.h中的类型为:

   /**
   * @brief  CAN handle Structure definition
   */
 typedef struct
 {
     CAN_TypeDef                 *Instance;  /*!< Register base address          */

     CAN_InitTypeDef             Init;       /*!< CAN required parameters        */

     CanTxMsgTypeDef*            pTxMsg;     /*!< Pointer to transmit structure  */

     CanRxMsgTypeDef*            pRxMsg;     /*!< Pointer to reception structure */

     __IO HAL_CAN_StateTypeDef   State;      /*!< CAN communication state        */

     HAL_LockTypeDef             Lock;       /*!< CAN locking object             */

     __IO uint32_t               ErrorCode;  /*!< CAN Error code                 */ 

}CAN_HandleTypeDef;

此外,我在其他文件中调用了App_Task_CAN.c中第一个显示的函数:

...
CAN_HandleTypeDef HCAN_Struct;//hcan struct type declaration in this file

uint32_t App_Task_CAN_GetError()
{   
    static uint32_t ErrorNumb;

    ErrorNumb=HAL_CAN_GetError(&HCAN_Struct);

    return ErrorNumb; //I want this functions returns an int value.
}

main.c中的主要代码:

int main(void)
{
    uint32_t    ErrorType=0;

    while (1)
    {
        ErrorType=App_Task_CAN_GetError(); //it takes the resulting value of calling HAL_CAN_GetError(&HCAN_Struct)
    }
}

当我通过论证时警告消失。但我不知道为什么要求我提出保存返回值的论据。

为什么它需要一个参数,因为它返回一个uint32_t?当主调用App_Task_CAN_GetError()时,是否可以改进代码以便从main获取更新的ErrorType?

注意:stm32l4xx_hal_can.c和.h无法修改,因为它们是系统库文件。

1 个答案:

答案 0 :(得分:4)

使用声明

int foo(void) 

表示返回int 不带参数的函数。 声明

int f() 

表示返回int的函数,该函数带有任意数量的参数

因此,如果你的函数在中没有参数,前者就是正确的原型。