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

fbr*_*eto 1 c c++ sizeof built-in

我在哪里可以获得有关Mac OS X(32位和64位)的unsigned int编译大小的信息gcc?一般来说,我希望拥有一个可以使用编译器/设置/平台/类型的资源,并且能够查找该类型的大小.有谁知道这样的事情?

更新:感谢所有回复.我希望在某个地方有更多的东西,而不是我必须在每台机器上编写和运行的代码.

GMa*_*ckG 9

sambowry方法的通用方法(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>();
}
Run Code Online (Sandbox Code Playgroud)

请注意,编译器不需要为name提供实际的字符串,但大多数都是.


Vil*_*iam 7

通常,如果包含,则无需知道确切的大小stdint.h.定义了几种非常有用的类型.

如果您想要确切尺寸,请使用以下选项:

int8_t
uint8_t
int16_t
uint16_t
int32_t
uint32_t
int64_t
uint64_t
Run Code Online (Sandbox Code Playgroud)

如果您想要至少指定的大小,请使用以下:

int_least8_t
uint_least8_t
int_least16_t
uint_least16_t
int_least32_t
uint_least32_t
int_least64_t
uint_least64_t
Run Code Online (Sandbox Code Playgroud)

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

int_fast8_t
uint_fast8_t
int_fast16_t
uint_fast16_t
int_fast32_t
uint_fast32_t
int_fast64_t
uint_fast64_t
Run Code Online (Sandbox Code Playgroud)


sam*_*wry 6

您可以使用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     );
}
Run Code Online (Sandbox Code Playgroud)

编辑:%我改为%zi

  • 如果`size_t`和`int`具有不同的大小,则printf可能会打印错误的信息. (3认同)