【问题标题】:Conditional Preprocessor Directive to determine Endianness of a machine [duplicate]确定机器字节顺序的条件预处理器指令[重复]
【发布时间】:2018-03-22 16:38:58
【问题描述】:

我们想使用一些预处理指令在 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

在大端机器中,我不想编译第 1,2 和 3 行。应该禁用这三行。

【问题讨论】:

  • 如果您使用 C 编程,请仅添加 C 标签(即使该问题可能同时适用于 C 和 C++)。特别是不要添加特定于版本的语言标签(如c++14),除非您的问题是关于该语言的特定版本。
  • 至于您的问题,有 许多 个开源项目有同样的需求,并且已经解决了。试着环顾四周。
  • @Someprogrammerdude 我找到了一些解决方案,但这些解决方案不适用于编译时检查。请分享解决方案。
  • 我解决这个问题的方法是使用我最喜欢的搜索引擎并寻找现有的解决方案。如果您想要的话,添加单词preprocessorcompile time 很重要。并阅读我的编译器的文档(它可能已经有宏)。
  • 请您在这里分享解决方案。这对我真的很有帮助。

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


【解决方案1】:

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

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

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

添加指向可能重复的SO : detect endianness 的链接。那里的一些方法看起来很合理。

【讨论】:

    猜你喜欢
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多