これは「printfが%aをサポートするかどうかを検出する方法」という質問には答えません。一般的には、%a
がサポートされるようにコンパイラのインストールを変更することができます。
まず、mingw-w64を使用してください。これはMinGWの最新のフォークです。 MinGWの元のバージョンはよく管理されておらず、あなたが経験しているようなバグを修正しません(Microsoftや何かを非難することを好みます)。
は、Windows 10でのMinGW-W64 4.9.2を使用して、次のコードは、私の作品:
#include <stdio.h>
int main()
{
double x = 3.14;
printf("%a\n", x);
}
が正しい0x1.91eb85p+1
を生成します。これはまだMicrosoftランタイムに延期されています。
ご質問は%la
に言及し、しかし%a
と%la
は両方とも同じであり、float
またはdouble
引数のいずれかを印刷するために使用することができます。
long double
を印刷する場合、Microsoftランタイムはそれをサポートしていません。 gccとMSは異なるサイズのlong double
を使用します。 0xc.8f5c28f5c28f8p-2
を出力
#define __USE_MINGW_ANSI_STDIO 1
#include <stdio.h>
int main()
{
long double x = 3.14;
printf("%La\n", x);
}
:あなたはmingwの-W64独自のprintfの実装を使用する必要があります。これは実際には0x1.91eb85p+1
と同じ番号であり、精度とバイナリポイントの配置が異なりますが、これも正しいです。
標準を調べるのはどうですか? http://port70.net/~nsz/c/c11/n1570.html#7.21.6.1?環境がこれをサポートしていない場合、それは準拠していません。 – Olaf
'-v'はバージョン情報を報告しますか? – jxh
コンパイラ環境に簡単にアクセスできません - パッケージビルドサービスからログを取得しています。 – crowding