【问题标题】:Preprocessor defines and macros for m68k?m68k 的预处理器定义和宏?
【发布时间】:2016-04-06 05:42:04
【问题描述】:

我们在 Debian's testing/build infrastructure 下为 m68k 构建失败:

config.h:29:3: error: #error "IS_LITTLE_ENDIAN is set, but __BYTE_ORDER__  does not equal __ORDER_LITTLE_ENDIAN__"
 # error "IS_LITTLE_ENDIAN is set, but __BYTE_ORDER__  does not equal __ORDER_LITTLE_ENDIAN__"

修复很简单,但我需要知道为平台定义的预处理器。我没有具有该架构的机器,因此无法使用gcc -dM -E - </dev/null | sort 转储它们。

有人可以提供 m68k 的预处理器输出吗?

【问题讨论】:

    标签: macros c-preprocessor


    【解决方案1】:

    如果您愿意消磨时间,您可以为该平台构建一个交叉编译器。如果您关心那个特定的标志,请尝试将此测试添加到您的configure.ac

    #include <stdint.h>
    
    enum {
      ENDIAN_UNKNOWN,
      ENDIAN_BIG,
      ENDIAN_LITTLE,
      ENDIAN_BIG_WORD,   /* Middle-endian, Honeywell 316 style */
      ENDIAN_LITTLE_WORD /* Middle-endian, PDP-11 style */
    };
    
    int endianness(void)
    {
      union
      {
        uint32_t value;
        uint8_t data[sizeof(uint32_t)];
      } number;
    
      number.data[0] = 0x00;
      number.data[1] = 0x01;
      number.data[2] = 0x02;
      number.data[3] = 0x03;
    
      switch (number.value)
      {
      case UINT32_C(0x00010203): return ENDIAN_BIG;
      case UINT32_C(0x03020100): return ENDIAN_LITTLE;
      case UINT32_C(0x02030001): return ENDIAN_BIG_WORD;
      case UINT32_C(0x01000302): return ENDIAN_LITTLE_WORD;
      default:                   return ENDIAN_UNKNOWN;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      • 2011-02-12
      相关资源
      最近更新 更多