c - 如何删除警告“内置函数 snprintf 的隐式声明”?
问题描述
#include "stm32l475e_iot01.h"
#include "stm32l475e_iot01_tsensor.h"
#include <math.h>
float temp_value = 0; // Measured temperature value
char str_tmp[100] = ""; // Formatted message to display the temperature value
int main (void)
{
HAL_UART_Transmit(&huart1,msg1,sizeof (msg1),1000);
HAL_UART_Transmit(&huart1,msg2,sizeof (msg2),1000);
BSP_TSENSOR_Init();
HAL_UART_Transmit(&huart1,msg3,sizeof (msg3),1000);
while (1) {
temp_value = BSP_TSENSOR_ReadTemp();
int tmpInt1 = temp_value;
float tmpFrac = temp_value - tmpInt1;
int tmpInt2 = trunc(tmpFrac * 100);
snprintf(str_tmp,100," TEMPERATURE = %d.%02d\n\r", tmpInt1, tmpInt2);
HAL_UART_Transmit(&huart1,( uint8_t* )str_tmp,sizeof (str_tmp),1000);
HAL_Delay(5000);
}
}
解决方案
任何事物的“隐式声明”通常意味着您忘记了包含。在这种情况下,您忘记了“stdio”。
#include <stdio.h>
在某些情况下,您可能会包含一个包含您需要的头文件的头文件,您可以忘记包含并侥幸逃脱。
不要指望这个。
任何合理编写的头文件都会有保护措施,以确保预处理器不会将其包含两次。
#ifndef MY_WHACKY_HEADER_H
#define MY_WHACKY_HEADER_H
// Something whacky
#endif
这意味着您可以在使用其内容的任何地方包含该头文件,如果它是多余的,则不会造成任何伤害。
当不确定需要包含哪些标头时,如果您可以访问 Unix-y 控制台,则可以查找联机帮助页。例如,要了解snprintf
:
man snprintf
或者,您可以查看cppreference.com。那里的函数文档将包括它们声明的头文件。