在少數系統上double與long double相同。 如何在編譯時檢測long double是否具有擴展精度,並將其用於條件編譯。如何在編譯時檢測long double是否具有擴展精度
我看到有存在libgcc中預定義的宏SIZEOF_DOUBLE和SIZEOF_LONG_DOUBLE 但也有不是跨越不同的工具鏈移植。
有沒有C的方式來做到這一點?
在少數系統上double與long double相同。 如何在編譯時檢測long double是否具有擴展精度,並將其用於條件編譯。如何在編譯時檢測long double是否具有擴展精度
我看到有存在libgcc中預定義的宏SIZEOF_DOUBLE和SIZEOF_LONG_DOUBLE 但也有不是跨越不同的工具鏈移植。
有沒有C的方式來做到這一點?
您可以比較DBL_MANT_DIG
和LDBL_MANT_DIG
來自float.h
。
您可以測試在float.h中
「正確」的解決這個問題(如由許多項目)定義
#if DBL_MANT_DIG < LDBL_MANT_DIG
或相似的值是創建一個配置腳本。
配置腳本運行各種測試,包括編譯和運行小程序以確定編譯器和系統屬性。該腳本然後將它的發現作爲頭文件或makefile或兩者寫出來。當然,你可以做任何你喜歡的事情。
有一些工具可以半自動地完成這類事情,但它們可能會讓你過度使用。如果你想看看,名稱是autoconf和automake。要小心,它們學習起來並不簡單,但它們會生成配置腳本和makefile,只要它具有unix風格的外殼和GNU make,它們就可以在任何平臺上工作。
你可以試試'sizeof(double)> 8'。雖然不是便攜式的,但它在大多數情況下可能仍然有效。 – Mysticial 2012-01-05 22:58:22
你不能測試'sizeof(double)
2012-01-05 22:58:36
預處理器不識別sizeof。 – 2012-01-05 23:00:34