C 如何解决编译警告时函数的弃用声明?
我有3个文件依赖项,在其中一个文件依赖项中,我实现了一个函数,您可以在下面首先看到。它返回一个32位的int类型。第二个文件实现了一个调用第一个文件函数的函数。此函数将从主文件(第三个文件)调用。 当我编译(使用keil IDE)所有文件时,我有以下警告消息:C 如何解决编译警告时函数的弃用声明?,c,embedded,compiler-warnings,keil,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 declaratio
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;
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\u t,为什么它需要一个参数?当main调用App_Task_CAN_GetError()时,是否可以改进代码以从main获取更新的ErrorType
注意:不能修改stm32l4xx_hal_can.c和.h,因为它们是系统库文件。使用声明
int foo(void)
int f()
表示返回int
且不接受任何参数的函数。
宣言
int foo(void)
int f()
表示返回int
的函数,该函数接受任意数量的参数
因此,如果您有一个不带任何参数的函数,那么前者就是正确的原型。
uint32\u t App\u Task\u CAN\u GetError()
-->uint32\u t App\u Task\u CAN\u GetError(void)
@LPs警告消失,并且工作正常。谢谢。另请注意,根据6.11.6函数声明器,“使用带空括号的函数声明器(不是原型格式参数类型声明器)是一种过时的功能”,编译器警告此功能不推荐使用是正确的