mpaland / printf

Tiny, fast, non-dependent and fully loaded printf implementation for embedded systems. Extensive test suite passing.
MIT License
2.47k stars 452 forks source link

Compilation warnings with GCC #102

Open eyalroz opened 3 years ago

eyalroz commented 3 years ago

Hello Marco,

Thanks for making this available.

When compiling with GCC (8.4) I get a few spurious compilation warnings:

In file included from test/test_suite.cpp(41) :
test/../printf.c: In function ‘size_t test() :_ftoa(test::out_fct_type, char*, size_t, size_t, double, unsigned int, unsigned int, unsigned int)’:
test/../printf.c(349) :16: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]
   if (value != value)
                ^~~~~
test/../printf.c: In function ‘size_t test() :_etoa(test::out_fct_type, char*, size_t, size_t, double, unsigned int, unsigned int, unsigned int)’:
test/../printf.c(470) :17: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]
   if ((value != value) || (value > DBL_MAX) || (value < -DBL_MAX)) {
                 ^~~~~
test/../printf.c(564) :61: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion]
     idx = _ntoa_long(out, buffer, idx, maxlen, (expval < 0) ? -expval : expval, expval < 0, 10, 0, minwidth-1, FLAGS_ZEROPAD | FLAGS_PLUS);
                                                ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
test/test_suite.cpp: In function ‘void ____C_A_T_C_H____T_E_S_T____48()’:
test/test_suite.cpp(1088) :33: warning: implicit conversion from ‘float’ to ‘double’ when passing argument to function [-Wdouble-promotion]
   test() :sprintf(buffer, "%-8f", -INFINITY);
                                 ^
test/test_suite.cpp(1220) :37: warning: implicit conversion from ‘float’ to ‘double’ when passing argument to function [-Wdouble-promotion]
     test() :sprintf(buffer, "%.5f", i / 10000);
                                   ~~^~~~~~~
test/test_suite.cpp(1231) :27: warning: implicit conversion from ‘float’ to ‘double’ to match other operand of binary expression [-Wdouble-promotion]
   for (float i = -1e20; i < 1e20; i += 1e15) {
                         ~~^~~~~~
test/test_suite.cpp(1231) :37: warning: implicit conversion from ‘float’ to ‘double’ to match other operand of binary expression [-Wdouble-promotion]
   for (float i = -1e20; i < 1e20; i += 1e15) {
                                   ~~^~~~~~~
test/test_suite.cpp(1232) :35: warning: implicit conversion from ‘float’ to ‘double’ when passing argument to function [-Wdouble-promotion]
     test() :sprintf(buffer, "%.5f", i);
                                   ^

It should not be difficult to avoid them.