【问题标题】:gcc, width of long int on different architecturesgcc,不同架构上 long int 的宽度
【发布时间】:2010-11-22 10:13:36
【问题描述】:

在 64 位架构上,long int,根据 gcc,至少是一个 int64_t。在 32 位上,long int 至少为 int32_t。对于 Microsoft 编译器,long 始终是 int32_t,无论是 32/64 位。有什么办法:

  1. 强制 gcc 在 32 位上将 long 视为 int64_t? (为了便于测试)
  2. 强制 gcc 在 64 位上将 long 视为 int32_t? (为了符合 MS 的编译器)。

【问题讨论】:

    标签: gcc g++ 64-bit long-integer


    【解决方案1】:

    不要这样做 - 使用来自<stdint.h> 的标准类型,例如int32_tuint32_tint64_tuint64_t 等,而不是尝试对裸类型做出假设,例如long int 或试图让编译器随心所欲。

    注意:任何给定平台的 64 位模型(例如,大多数 *nix 平台、Mac OS X 等的 LP64)都是给定的,因此即使您可以说服编译器使用不同的 64 位模型,您可能会中断对系统代码、库等的任何调用。

    【讨论】:

    • 查看我对 Goz 回答的评论。
    【解决方案2】:

    这就是为什么通常更容易使用按平台定义的一组 typedef。在 random-platform-with-random-compiler-47.4 上编译时,它确实会为您节省很多麻烦

    【讨论】:

    • 我在所有项目中都使用 boost 的 cstdint。我不能强迫我团队的其他成员或图书馆作者也这样做。在编译器级别强制它(如果可能的话)似乎更安全。
    • @John:如果您的团队成员正在编写脆弱/不安全/不可移植的代码,那么您需要修复他们和/或他们的代码。
    猜你喜欢
    • 2020-04-11
    • 1970-01-01
    • 2015-08-03
    • 2011-06-17
    • 2010-12-09
    • 2012-11-15
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多