如何在C中打印int的大小?

我正在尝试在RHEL 5.6,64位上编译以下代码,并且我不断收到警告

“var.c:7:warning:format'%d'expect type'int',but argument 2 has type'long unsigned int'”

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned int n =10;
    printf("The size of integer is %dn", sizeof(n));
}

如果我将“n”的声明更改为以下内容无关紧要

  • 有符号整数n = 10;
  • int n = 10;
  • 我想要做的就是在我的机器上打印整数的大小,而不真正查看limits.h。


    sizeof函数返回一个size_t类型。 尝试使用%zu作为转换说明符而不是%d

    printf("The size of integer is %zun", sizeof(n));
    

    为了澄清,如果您的编译器支持C99,请使用%zu ; 否则,或者如果您希望获得最大的可移植性,打印size_t值的最佳方法是将其转换为unsigned long并使用%lu

    printf("The size of integer is %lun", (unsigned long)sizeof(n));
    

    原因是size_t由标准保证是一个无符号类型; 但是该标准没有指定它必须具有任何特定的尺寸,(只是足够大来表示任何对象的尺寸)。 事实上,如果unsigned long不能代表你的环境的最大对象,你甚至可能需要使用一个无符号的long long cast和%llu说明符。

    在C99中添加了z长度修饰符以提供一种方法来指定要打印的值是size_t类型的大小。 通过使用%zu您表示正在打印的值是size_t大小的无符号值。

    这是你不应该考虑它的那些东西之一,但是你确实需要这样做。

    进一步阅读:

  • printf和size_t
  • 便携的方式来打印size_t实例
  • 假设size_t是无符号的long

  • 你的问题是size_t是一个无符号类型。 尝试使用

    printf("The size of integer is %un", sizeof(n));
    

    你应该摆脱那个警告。


    我认为你应该这样写:

    printf("The size of integer is %dn", sizeof(int));
    
    链接地址: http://www.djcxy.com/p/72213.html

    上一篇: How do I print the size of int in C?

    下一篇: Is there a printf converter to print in binary format?