那么,“长”是否有任何意义?是否有理由声明long而不是ptrdiff_t或int64_t?
答案 0 :(得分:17)
是否有理由声明long而不是ptrdiff_t或int64_t?
在那些情况下从未有过。如果您想要指针差异或特定的64位值,则应使用ptrdiff_t
或int64_t
。您应该首先使用long
,除非可能位于依赖于平台的typedef
之后。
当您需要至少32位整数时,应使用long
,因为int
仅保证至少为16位。如果您需要本机类型,但至少需要32位,请使用long
。如果在某些旧平台上可以接受16位限制(这可能无关紧要,并且您的代码可能永远不会被编译),那么它并不特别重要。
答案 1 :(得分:5)
still useful
和something you should habitually use
之间存在细微差别。 long
类型仍然蓬勃发展,因为Chris Lutz noted支持许多系统和平台特定类型(尽管通常是无符号的)。
当您知道时,您将使用的数据总是适合该类型(同样,如果您还知道签名,则更好),没有特殊原因不使用它,特别是如果你在一个结构中使用有限的空间。
但是,在大多数情况下,为了将来的维护者,尽可能使用intxx_t或uintxx_t要好得多。例如,你不知道UNIX纪元日期总是适合32位平台上的无符号长整数(因此,time_t),除非你拥有世界将在此之前结束的良好权威它滚过:)