types.h中的内容——编译器在哪里定义int、带符号int和其他值的宽度
Content within types.h — where does the compiler define the width of int, signed int and others?
我阅读了/usr/include/bits/types.h
和/usr/include/sys/types.h
,但只看到它们使用"unsigned int"或"signed int"来定义其他一些相对较少使用的类型,例如:
typedef signed char __int8_t;
...
typedef signed int __int32_t;
或:
#define __S32_TYPE int
#define __U32_TYPE unsigned int;
至于"signed int
(或int
)最初定义在哪里?"answers"在哪个文件中,gcc决定在我的x86-64服务器中int
应该是4字节宽"?我什么也找不到。
我想知道gcc/g++编译器为我们定义这些基元类型的过程,并希望看到最初的定义文件。请告诉我最初的立场,或者告诉我一些找到他们的方法。
int
、unsigned int
、long
和其他一些是系统类型,它们由编译器自己定义。编译器对这些类型有一些要求,例如int
必须至少为16位,但编译器可能会使其更长。通常int
表示至少16位的最有效积分类型。
你不应该依赖int的实际大小,如果你需要它容纳32767以上,请坚持使用long
或long long
类型。如果由于所需的溢出行为而需要一定数量的位积分,则可以使用uint16_t
/uint32_t
类型。如果你想确保至少有一定数量的比特,你也可以使用uint_fast16_t
/uint_fast32_t
。
基本类型是编译器的固有类型;它们是在编译编译器时内置的,不会在任何容易找到的地方定义。(在代码的某个地方有相关的信息,但它不会特别容易找到。)
因此,您不会直接在标头中找到信息。您可以从sizeof()
操作符获取尺寸信息。您可以从<limits.h>
和<float.h>
中的宏推断大小。
相关文章:
- 检查TCHAR数组输入是否为带符号整数C++
- 将无符号转换为复杂<int>原因符号转换警告
- GDB:运行不带符号的 cpp 进程调试
- 与 string.size() 比较时 int 的符号性显示警告
- 这个右移是如何工作的:字符串流>>无符号的int>>无符号的int?
- 使用范围检查和带符号的size_type扩展std::vector
- 将fortran生成的二进制文件读取到C++中的带符号整数数组中
- 用于在2个带符号整数区间之间进行除法的C++算法
- 如何从uint8_t的缓冲区读取带符号整数,而不调用未定义或实现定义的行为
- 转换 int -> 无符号长 长 是否由标准定义
- 为什么在执行 int / 无符号 int 除法时使用 'divl'
- 仅使用位操作(不使用分支)将16位带符号值约束在0和4095之间
- 在c++中通过串行发送一个带符号的整数作为字节,Arduino读取它
- 带符号的16位SSE平均值
- types.h中的内容——编译器在哪里定义int、带符号int和其他值的宽度
- 使用带符号字符输入的isalnum-Visual C++
- 如何对具有带符号数字类型的事物进行谓词
- mkdir,带符号的路径名
- 返回特定位范围内的带符号值
- 为什么唯一的带符号整数类型会导致clang中的溢出警告