长长在 c99

car*_*ass 8 c assembly types abi long-long

在 C99 标准中,他们引入了long long. 这样做的目的是什么?在我(有限的)C 编程经验中,我只见过 4 字节的 int 和 8 字节的 long。例如,从编译器资源管理器: 在此处输入图片说明

如果long已经是8,为什么还需要添加另一种long long类型?这对编译器/架构有什么影响?

chu*_*ica 6

如果 long 已经是 8 了,那为什么还要再添加一个 long long 类型呢?这对编译器/架构有什么影响?

“如果 long 已经是 8”并不总是正确的,因为存在依赖 32 位longint32 位或 16 位的代码。

要求long为 64 位会破坏代码库。这是一个主要问题。


然而,要求long保持 32 位(并且没有long long)不会访问标准的 64 位整数,因此long long.

允许long32 位或 64 位(或其他)允许转换。

各种函数传入/返回,longfseek(), ftell(). 它们受益于long超过 32 位的大文件支持。

推荐的做法鼓励更广泛的long:“用于的类型size_t并且ptrdiff_t不应具有大于 的整数转换等级,signed long int除非实现支持足够大的对象以使其成为必要。” 这与超过 32 位的内存大小有关。


也许在未来的实现中可能会使用int/long/long long/intmax_t32/64/128/256 位。

IAC,我看到固定宽度类型intN_tlong和 上越来越受欢迎long long。对于特殊情况,我倾向于使用固定宽度类型或bool, ( unsigned) char, int/ unsigned, size_t, ( u)intmax_t和 leave signed char, ( unsigned) short, ( unsigned) long, ( unsigned) long long

  • @carl.hiass 哦,是的。每年都会产生数十亿个嵌入式流程。大部分是 8/16 位,通常用 16 位“int”编译。 (2认同)