长长在c99
在 C99 标准中,他们引入了long long. 这样做的目的是什么?在我(有限的)C 编程经验中,我只见过 4 字节的 int 和 8 字节的 long。例如,从编译器资源管理器:
如果long已经是8,为什么还需要添加另一种long long类型?这对编译器/架构有什么影响?
回答
如果 long 已经是 8 了,那为什么还要再添加一个 long long 类型呢?这对编译器/架构有什么影响?
“如果 long 已经是 8”并不总是正确的,因为存在依赖 32 位long和int32 位或 16 位的代码。
要求long为 64 位会破坏代码库。这是一个主要问题。
然而,要求long保持 32 位(并且没有long long)不会访问标准的 64 位整数,因此long long.
允许long32 位或 64 位(或其他)允许转换。
各种函数传入/返回,long如fseek(), ftell(). 它们受益于long超过 32 位的大文件支持。
推荐的做法鼓励更广泛的long:“用于的类型size_t并且ptrdiff_t不应具有大于 的整数转换等级,signed long int除非实现支持足够大的对象以使其成为必要。” 这与超过 32 位的内存大小有关。
也许在未来的实现中可能会使用int/long/long long/intmax_t32/64/128/256 位。
IAC,我看到固定宽度类型intN_t在long和 上越来越受欢迎long long。对于特殊情况,我倾向于使用固定宽度类型或bool, ( unsigned) char, int/ unsigned, size_t, ( u)intmax_t和 leave signed char, ( unsigned) short, ( unsigned) long, ( unsigned) long long。
- @carl.hiass Oh yes. _Billions_ of embedded processes are made each year. A large share are 8/16-bit typically compiled with 16-bit `int`.