的(signed)int的我有我的代碼中定義了一個平臺依賴型: typedef uint64_t myType;
printf和未知大小
但是在一些較爲有限的平臺,它可能是32位。
我該如何printf
呢? 在目前情況下,我可以使用%llu
,但是如果在另一個平臺上它是32位,這不是最好的主意。
我想過使用一些宏,但誰會知道更好的方法?例如,我很想了解一些格式說明符,它們可以從下一個參數中獲得長度。
的(signed)int的我有我的代碼中定義了一個平臺依賴型: typedef uint64_t myType;
printf和未知大小
但是在一些較爲有限的平臺,它可能是32位。
我該如何printf
呢? 在目前情況下,我可以使用%llu
,但是如果在另一個平臺上它是32位,這不是最好的主意。
我想過使用一些宏,但誰會知道更好的方法?例如,我很想了解一些格式說明符,它們可以從下一個參數中獲得長度。
既然你有特定於平臺的類型,它應該是很容易使用特定於平臺的格式字符串爲好,這樣的:
#ifdef USING_64_bits
typedef uint64_t myType;
#define MY_TYPE_FMT PRIu64
#else
typedef uint32_t myType;
#define MY_TYPE_FMT PRIu32
#endif
然後你可以使用它:
myType var1 = 42, var2 = 99;
printf ("%6" MY_TYPE_FMT ", %019" MY_TYPE_FMT "\n", var1, var2);
從格式字符串中提取%
允許您動態插入其他格式說明符,例如字段寬度和填充字符。
您還會注意到我已經避免了%llu
風格的格式說明符,您應該使用inttypes.h
中更有針對性的格式說明符,因爲實現會爲您的類型提供正確的格式說明。
或刪除「%」,以便在調用printf時添加其他標誌。 – immibis
好點,@immibis,做出了改變並添加了一個例子。 – paxdiablo
接受這個問題,它實際上也回答了打印平臺相關類型的更廣泛的問題。 – user1532080
只投它最多,規模最大,可能的整數類型的匹配所需的符號性和使用的格式爲,或者:
printf("%jd", (intmax_t)x);
或:
printf("%ju", (uintmax_t)x);
(問題標題請求籤署但身體正在使用未簽名的例子,所以我已經涵蓋了兩個。)
這是比使用PRI*
宏建議少得多醜陋/更可讀在另一個答案中,也適用於你自己不知道要使用的宏PRI
的類型,如off_t
。
我認爲它應該是'uintmax_t' – Danh
問題標題說已簽署,但正文說無符號。我會澄清。 –
我知道這不能回答你的問題。如果在某些平臺上它將是32位,並且您知道它在這些平臺上運行,您是否需要64位數字? –
定義printf格式說明符宏以及typedef –
另外,根據您使用的語言選擇單一語言標記 –