snprintf
タイプのパラメータで「%f」指定子を使用すると、MISRAタイプのエラーが発生しますfloat
。
私の調査によると、「%f」はのタイプを想定しているため、MISRAは正しいですdouble
。
float
型パラメーターではなく型パラメーターを使用する浮動小数点指定子または修飾子はありdouble
ますか?
私は組み込みシステムで作業していますがdouble
、関数を満足させるためだけに32ビット浮動小数点から64ビットに変換したくありませんsnprintf
。コードはデバッグ/コンソールポートに出力され、これが変換が行われる唯一の場所です。
コード例が必要な方のために:
// This section is for those C++ purists and it fulfills the C++ tag.
#if __cplusplus
#include <cstdio>
#else
#include <stdio.h>
#endif
#define BUFFER_SIZE (128U)
int main(void)
{
char buffer[BUFFER_SIZE];
float my_float = 1.234F;
// The compiler will promote the single precision "my_float"
// to double precision before passing to snprintf.
(void)snprintf(buffer, BUFFER_SIZE, "%10.4f", my_float);
puts(buffer);
return 0;
}
SOとWebに関する私の研究はすべて、浮動小数点値の出力に関するものであり、float
昇格double
が行われないようにパラメーターを必要とする指定子に関するものではありません。
ARM7TDMIプロセッサ用のIAREmbeddedWorkbenchコンパイラを使用しています。