“长”在C中仍然有用吗?

时间:2010-03-07 22:29:52

标签: c

  • 现在已经不再是最大的整数类型,因为它有很长的时间。
  • 它不是固定宽度类型:在某些平台上为32位,在其他平台上为64位。
  • 它不一定与指针大小相同(例如,在64位Windows上)

那么,“长”是否有任何意义?是否有理由声明long而不是ptrdiff_t或int64_t?

2 个答案:

答案 0 :(得分:17)

  

是否有理由声明long而不是ptrdiff_t或int64_t?

在那些情况下从未有过。如果您想要指针差异或特定的64位值,则应使用ptrdiff_tint64_t。您应该首先使用long,除非可能位于依赖于平台的typedef之后。

当您需要至少32位整数时,应使用long,因为int仅保证至少为16位。如果您需要本机类型,但至少需要32位,请使用long。如果在某些旧平台上可以接受16位限制(这可能无关紧要,并且您的代码可能永远不会被编译),那么它并不特别重要。

答案 1 :(得分:5)

still usefulsomething you should habitually use之间存在细微差别。 long类型仍然蓬勃发展,因为Chris Lutz noted支持许多系统和平台特定类型(尽管通常是无符号的)。

当您知道时,您将使用的数据总是适合该类型(同样,如果您还知道签名,则更好),没有特殊原因使用它,特别是如果你在一个结构中使用有限的空间。

但是,在大多数情况下,为了将来的维护者,尽可能使用intxx_t或uintxx_t要好得多。例如,你知道UNIX纪元日期总是适合32位平台上的无符号长整数(因此,time_t),除非你拥有世界将在此之前结束的良好权威它滚过:)