2009-06-02 88 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的值。

相关问题