printf の %lf について
TDM-GCC 5.1.0 で
以下のソースを
#include <stdio.h>
int main(void){
double v = 3.1415926;
printf("%f\n", v);
printf("%lf\n", v);
}
gcc -std=c99 -pedantic test.c
のようにc99 を指定してコンパイル実行すると
3.141593
0.000000
のように%lf
指定した方が0.000000
になってしまいます。
オプション指定なし(gcc test.c
)でコンパイルした場合
3.141593
3.141593
のように期待する結果が得られます。
printf
での %lf
の使用はC99では適合のはずなのでおかしな結果です。
以前使用していた古いバージョンのGCC(MinGw gcc3.2) ではc99
オプション使用時に%lf
は使用できていましたので、
このgccでの固有バグではないかと思いますが、
当面(バグフィックスされるまで)困るので
回避方法を探しています。
C99オプションなしでコンパイルした場合問題ないので、
なんらかの方法で回避できるのではないかと思っています。