2009-06-02 265 views
57

Size_t定義爲一個unsigned整數,但其大小取決於您在32位還是64位機器上。什麼是打印出size_t的正確便攜方式?使用printf打印size_t的正確方法是什麼?

+2

可能的重複[跨平臺格式字符串的變量的類型大小\ _t?](http://stackoverflow.com/questions/174612/cross-platform-format-string-for-variables-of-type-size -t) – 2015-10-02 09:31:12

回答

8

有一個C++標籤上的這一點,所以cout <<是另一種可能的答案。

這在C的所有版本中都令人驚訝地很難找到。在C90中,鑄造到unsigned long應該可行,但在C99中可能不適用,並且C99解決方案不一定適用於C90。在1995年的變化中引入了可靠區分C90和C99的能力(指定了__STDC__的允許值)。我不認爲有一種適用於C90,C99和C++的完全可移植的方法,儘管這些解決方案可以用於任何一種解決方案。

7

我認爲C++的答案是:

std::size_t n = 1; 
std::cout << n; 

對於C風格的IO這是一個稍微複雜一點。在C99中,他們爲size_t值添加了z長度修飾符。然而,先前對TR1-這是不支持,所以你只剩下澆鑄到一個特定的大小,如:

std::size_t n = 1; 
std::printf("%lu\n", static_cast<unsigned long>(n)); 

話又說回來,unsigned long long是不是真的用C支持++反正所以上面將正常工作,因爲unsigned long是最大的法律整體類型。在TR1之後,您可以安全地使用%zu獲取size_t的值。

相關問題