這並不回答「如何檢測printf是否支持%a?」這個問題。在一般情況下,但您可以修改您的編譯器安裝,以便支持%a
。
首先,使用mingw-w64。這是MinGW的最新分支。 MinGW的原始版本沒有得到很好的維護,並沒有修復你遇到的錯誤(更喜歡責怪微軟等)。
在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
。你必須使用的MinGW-W64自己的printf實現:
#define __USE_MINGW_ANSI_STDIO 1
#include <stdio.h>
int main()
{
long double x = 3.14;
printf("%La\n", x);
}
其輸出0xc.8f5c28f5c28f8p-2
。這實際上是與0x1.91eb85p+1
相同的數字,具有更高的精度和不同的二進制點位置,這也是正確的。
看看標準怎麼樣? http://port70.net/~nsz/c/c11/n1570.html#7.21.6.1?如果您的環境不支持此操作,則不符合規定。 – Olaf
版本信息的'-v'報告是什麼? – jxh
我沒有可輕鬆訪問的編譯器環境 - 我從包構建服務獲取日誌。 – crowding