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

标签 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,为什么还需要一个参数?是否可以改进代码,以便在 main 调用 App_Task_CAN_GetError() 时从 main 获取更新的 ErrorType?

注意:stm32l4xx_hal_can.c和.h是系统库文件,不能修改。

最佳答案

使用 ,声明

int foo(void) 

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

int f() 

表示返回int的函数,该函数接受任意数量的参数

因此,如果您有一个不带参数 的函数,前者是正确的原型(prototype)。

关于c - 如何解决编译警告时函数的弃用声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42852956/

相关文章:

c - fscanf 段错误读入数组

c - 使用 fgets 到达 EOF

c++ - 链接器如何决定代码执行将从哪里开始? [嵌入式]

rust - Rust 中的静态物体

c - 使用 C 将小写字母转换为大写字母

c - mmap() 失败,而 devme2 成功 (C/CPP) [Allwinner A20]

embedded - zlib 内存使用/性能。具有 500kb 数据

delphi - 如果它们只是用作表单控件的指针,我是否需要 'create'/初始化局部变量?

cocoa - 避免 "[superclass] may not respond to [selector]"警告,而不会引发 LLVM 的 "Cannot cast ' super'"错误

c - 在 C 中定义函数之前使用函数时的隐式声明,为什么编译器不能解决这个问题?