在 C99 标准中,他们引入了 long long
.这样做的目的是什么?在我(有限的)C 编程经验中,我只见过 4 字节的 int 和 8 字节的 long。例如,从编译器资源管理器:
如 long
已经是 8
那么,为什么还要再加一个long long
类型?这对编译器/架构有什么影响?
最佳答案
If long is already 8 then, why is it necessary to add another long long type? What does this do to the compiler/architecture?
“如果 long 已经是 8”并不总是正确的,因为存在依赖 32 位的代码
long
和 int
作为 32 或 16 位。需要
long
因为 64 位会破坏代码库。这是一个主要问题。还需要
long
保持 32 位(并且没有 long long
)将无法访问标准的 64 位整数,因此是 long long
的基本原理.允许
long
因为 32 位或 64 位(或其他)允许转换。各种函数传入/返回
long
喜欢 fseek(), ftell()
.他们受益于 long
超过 32 位以支持大文件。推荐做法鼓励更广泛的
long
: "用于 size_t
和 ptrdiff_t
的类型的整数转换等级不应大于signed long int
除非实现支持足够大的对象以使其成为必要。”这与超过 32 位的内存大小有关。也许在 future 的实现可能会使用
int/long/long long/intmax_t
作为 32/64/128/256 位。IAC,我看到固定宽度类型
intN_t
越来越受欢迎 long
和 long long
.我倾向于使用固定宽度类型或 bool
, ( unsigned
) char
, int
/unsigned
, size_t
, ( u
) intmax_t
然后离开 signed char
, ( unsigned
) short
, ( unsigned
) long
, ( unsigned
) long long
对于特殊情况。
关于c - 长长在 c99,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65648198/