types.h中的内容——编译器在哪里定义int、带符号int和其他值的宽度

Content within types.h — where does the compiler define the width of int, signed int and others?

本文关键字:int 带符号 其他 在哪里 types 编译器 定义      更新时间:2023-10-16

我阅读了/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++编译器为我们定义这些基元类型的过程,并希望看到最初的定义文件。请告诉我最初的立场,或者告诉我一些找到他们的方法。

intunsigned intlong和其他一些是系统类型,它们由编译器自己定义。编译器对这些类型有一些要求,例如int必须至少为16位,但编译器可能会使其更长。通常int表示至少16位的最有效积分类型

你不应该依赖int的实际大小,如果你需要它容纳32767以上,请坚持使用longlong long类型。如果由于所需的溢出行为而需要一定数量的位积分,则可以使用uint16_t/uint32_t类型。如果你想确保至少有一定数量的比特,你也可以使用uint_fast16_t/uint_fast32_t

基本类型是编译器的固有类型;它们是在编译编译器时内置的,不会在任何容易找到的地方定义。(在代码的某个地方有相关的信息,但它不会特别容易找到。)

因此,您不会直接在标头中找到信息。您可以从sizeof()操作符获取尺寸信息。您可以从<limits.h><float.h>中的宏推断大小。