代码之家  ›  专栏  ›  技术社区  ›  fbrereto

C/C++:不同编译器/平台的内置类型大小

  •  1
  • fbrereto  · 技术社区  · 16 年前

    我到哪里可以得到关于,比如, unsigned int 下编译 gcc 对于Mac OS X(32位和64位)?总的来说,我希望有一个可以使用编译器/设置/平台/类型访问的资源,并且能够查看该类型的大小。有人知道这种事吗?

    最新消息:感谢您的回复。我希望在静态表的某个位置有更多的东西,而不是在每台机器上编写和运行的一段代码。

    6 回复  |  直到 10 年前
        1
  •  3
  •   David R Tribble    16 年前

    如果您不能编写一个程序来查找,您应该参考编译器/平台的ABI(应用程序二进制接口)规范。它应该记录支持的基本基元类型的大小、对齐方式、结束注释等。

        2
  •  9
  •   GManNickG    16 年前

    SAMBORY方法的一般方法(C++):

    #include <iostream>
    #include <typeinfo>
    
    template <typename T>
    void print_sizeof(void)
    {
        std::cout << "sizeof(" <<
            typeid(T).name() << ") == " <<
            sizeof(T) << std::endl;
    }
    
    int main(void)
    {
        print_sizeof<short>();
        print_sizeof<unsigned int>();
        print_sizeof<long>();
        print_sizeof<long long>();
        print_sizeof<uint64_t>();
    }
    

    注意,编译器不需要为名称提供实际的字符串,但大多数情况下都需要。

        3
  •  7
  •   Viliam    16 年前

    一般来说,如果包括 stdint.h . 定义了几种非常有用的类型。

    如果您想要精确的尺寸,请使用:

    int8_t
    uint8_t
    int16_t
    uint16_t
    int32_t
    uint32_t
    int64_t
    uint64_t
    

    如果至少需要指定的大小,请使用以下命令:

    int_least8_t
    uint_least8_t
    int_least16_t
    uint_least16_t
    int_least32_t
    uint_least32_t
    int_least64_t
    uint_least64_t
    

    如果至少要为速度优化指定的大小,请使用以下命令:

    int_fast8_t
    uint_fast8_t
    int_fast16_t
    uint_fast16_t
    int_fast32_t
    uint_fast32_t
    int_fast64_t
    uint_fast64_t
    
        4
  •  6
  •   sambowry    16 年前

    可以使用sizeof运算符查询数据类型的长度。例如:

    #include <stdio.h> 
    #include <inttypes.h> 
    
    #define PRINT_SIZEOF(type)  printf("sizeof( " #type " ) == %zi\n", sizeof(type) )
    
    int main(void){
      PRINT_SIZEOF( short        );
      PRINT_SIZEOF( unsigned int );
      PRINT_SIZEOF( long         );
      PRINT_SIZEOF( long long    );
      PRINT_SIZEOF( uint64_t     );
    }
    

    编辑:我更改为%zi

        5
  •  2
  •   system PAUSE    16 年前

    您可以编写一个使用 sizeof 调用您感兴趣的所有类型。也可以用来检查极限。

        6
  •  0
  •   Earlz    16 年前

    您可能会编写一些提示输入类型的简单shell脚本,当您输入它时,它会编译类似Sambowry发布的内容,并执行它来告诉您它的大小。