首页 > 解决方案 > 如何删除警告“内置函数 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);
    }
}

标签: cstm32implicittemperature

解决方案


任何事物的“隐式声明”通常意味着您忘记了包含。在这种情况下,您忘记了“stdio”。

#include <stdio.h>

在某些情况下,您可能会包含一个包含您需要的头文件的头文件,您可以忘记包含并侥幸逃脱。

不要指望这个。

任何合理编写的头文件都会有保护措施,以确保预处理器不会将其包含两次。

#ifndef MY_WHACKY_HEADER_H
#define MY_WHACKY_HEADER_H

// Something whacky

#endif

这意味着您可以在使用其内容的任何地方包含该头文件,如果它是多余的,则不会造成任何伤害。

当不确定需要包含哪些标头时,如果您可以访问 Unix-y 控制台,则可以查找联机帮助页。例如,要了解snprintf

man snprintf

或者,您可以查看cppreference.com。那里的函数文档将包括它们声明的头文件。


推荐阅读