【问题标题】:Where the "BYTE_ORDER" macro is defined in OSX?在 OSX 中定义“BYTE_ORDER”宏的位置?
【发布时间】:2012-06-17 22:31:26
【问题描述】:

我想在我的 Xcode 项目中使用“BYTE_ORDER”宏,但我不能,因为我不知道它是在哪个标头中定义的。

【问题讨论】:

    标签: c macos unix endianness


    【解决方案1】:

    当我查看我的 Xcode 4.3.X 安装时,我发现“byte_order.h”文件位于几个地方:

    [/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform]:;!fi
    find . -name byte_order.h -print
    ./Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/architecture/byte_order.h
    ./Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/machine/byte_order.h
    ./Developer/SDKs/MacOSX10.6.sdk/usr/include/architecture/byte_order.h
    ./Developer/SDKs/MacOSX10.6.sdk/usr/include/architecture/i386/byte_order.h
    ./Developer/SDKs/MacOSX10.6.sdk/usr/include/architecture/ppc/byte_order.h
    ./Developer/SDKs/MacOSX10.6.sdk/usr/include/machine/byte_order.h
    ./Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/architecture/byte_order.h
    ./Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/machine/byte_order.h
    ./Developer/SDKs/MacOSX10.7.sdk/usr/include/architecture/byte_order.h
    ./Developer/SDKs/MacOSX10.7.sdk/usr/include/architecture/i386/byte_order.h
    ./Developer/SDKs/MacOSX10.7.sdk/usr/include/machine/byte_order.h
    

    您可能希望在 .c 文件中添加“#include <architecture/byte_order.h>”以获取 byte_order 宏。

    对于实际的“BYTE_ORDER”定义本身,它是在几个特定的​​地方定义的,但它的定义方式似乎是为了非常特定的目的。例如,这个定义:

    #define __DARWIN_BYTE_ORDER __DARWIN_LITTLE_ENDIAN
    #define BYTE_ORDER  __DARWIN_BYTE_ORDER
    ./Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/i386/endian.h
    

    仅适用于内核扩展(驱动程序)。

    这个定义:

    #     define BYTE_ORDER LITTLE_ENDIAN
    #     define BYTE_ORDER BIG_ENDIAN
    #  endif /* BYTE_ORDER */
    #  define X_BYTE_ORDER BYTE_ORDER
    ./Developer/SDKs/MacOSX10.7.sdk/usr/X11/include/X11/Xarch.h
    

    适用于 X11 的东西 (ewww)。

    我想说最好的办法是在“byte_order.h”文件中使用“NXHostByteOrder”内联函数,这将为您提供当前主机的字节顺序。

    【讨论】:

    • 看来byte_order.h不包含宏BYTE_ORDER:opensource.apple.com/source/architecture/architecture-260/…
    • 是的......刚刚注意到了。我会稍微修改一下我的答案。
    • 感谢您的回答。不幸的是,与“BYTE_ORDER”宏不同,“NXHostByteOrder”不能用于预处理器条件(据我所知)。只是出于好奇……你认为“NSHostByteOrder”是建立在“NXHostByteOrder”之上的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2015-05-06
    • 2015-09-26
    • 2015-03-16
    • 2012-07-01
    相关资源
    最近更新 更多