Macros 预处理器为m68k定义和宏?

Macros 预处理器为m68k定义和宏?,macros,c-preprocessor,Macros,C Preprocessor,我们在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__" 修复很容易,但我需要知道预处理器为平台定义的

我们在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-转储它们。如果您愿意消磨时间,可以为该平台构建一个交叉编译器。如果您只关心该特定标志,请尝试将此测试添加到
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;
  }
}
#包括
枚举{
ENDIAN_未知,
恩迪安·比格,
恩迪安·利特尔,
ENDIAN_BIG_WORD,/*中ENDIAN,霍尼韦尔316风格*/
ENDIAN_LITTLE_WORD/*中ENDIAN,PDP-11样式*/
};
内部边界(空)
{
联盟
{
uint32_t值;
uint8_t数据[sizeof(uint32_t)];
}数量;
数字.数据[0]=0x00;
number.data[1]=0x01;
number.data[2]=0x02;
编号.数据[3]=0x03;
开关(数值)
{
案例UINT32_C(0x00010203):返回ENDIAN_BIG;
案例UINT32_C(0x03020100):返回ENDIAN_LITTLE;
案例UINT32_C(0x02030001):返回ENDIAN_BIG_字;
case UINT32_C(0x01000302):返回ENDIAN_LITTLE_单词;
默认值:返回ENDIAN_未知;
}
}