【问题标题】:Is "long" still useful in C?“long”在 C 中仍然有用吗?
【发布时间】:2010-03-07 22:29:51
【问题描述】:
  • 现在有了“long long”,它不再是最大的整数类型了。
  • 它不是固定宽度类型:在某些平台上是 32 位,在其他平台上是 64 位。
  • 不一定与指针大小相同(例如,在 64 位 Windows 上)

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

【问题讨论】:

    标签: c


    【解决方案1】:

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

    在那些情况下从来没有。如果你想要一个指针差异,或者一个特定的 64 位值,你应该使用 ptrdiff_tint64_t。你一开始就不应该使用long,除非可能在依赖于平台的typedef之后。

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

    【讨论】:

    • 我应该注意到,C99 的 int_leastX_t 类型也可以满足该要求,但由于很少有编译器支持 C99,因此可靠性较低。
    【解决方案2】:

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

    当您知道您将使用的数据总是适合该类型时(当然,如果您也知道签名会更好),就没有使用它的特殊原因,尤其是当您在结构中的空间有限时。

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

    【讨论】:

    • 我认为除非您有特定的理由需要完全 XX 位,否则您不应该使用intXX_t。通常您确实需要至少 XX 位,在这种情况下,您可以简单地使用int for X long 对于 16 long long 表示 32 time_t。 (需要完全 XX 位的最常见原因是处理磁盘或在线格式)。
    • @caf:无法反驳。但是,我编写的许多代码都是基于某个成员永远不会“大于”某种类型的想法编写的,而实际上一切开始时都比我实际计划的要小得多。通常情况下,您必须保留查询结果,将其他事情处理的数据集制成表格等。我认为我的防御性高于效率,但我大部分时间别无选择:)
    猜你喜欢
    • 2015-08-26
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 2015-08-25
    • 2011-05-21
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多