条件预处理器指令,用于确定机器的字节顺序

时间:2017-10-11 06:00:46

标签: c++ c c-preprocessor c++14 preprocessor-directive

我们希望使用一些预处理器指令在C中编写与字节无关的代码。我们可以定义一个预处理器指令,它可以帮助我们在编译期间检查机器的字节顺序吗?我们想要类似下面的示例代码。任何帮助将不胜感激。

#if(some conditions)
#define LITTLE_ENDIAN 1
#else
#define LITTLE_ENDIAN 0
#endif

我知道有几个解决方案,但那些不符合我的要求。我不想在大端机器中编译小端特定代码,反之亦然。例如

#if LITTLE_ENDIAN

 line1..
 line2..
 line3..

#else

 line4..
 line5..
 line6..

#endif

在big endian机器上,我不想编译1,2和3行。这三行应该被禁用。

1 个答案:

答案 0 :(得分:0)

我不确定是否有可能。我在Android NDK中使用CMake,并且有一个CMake小部件来执行此测试。

不幸的是,它在主机(windows)计算机上运行,​​而不是理解目标(android)设备。

需要有一个已发布的机制(例如编译器提供的值)才能使其正常工作,我不知道任何此类全局值。

添加指向潜在重复SO : detect endianness的链接。有些方法看起来似乎有道理。