You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCC编译时如何查询目标架构字节序?C++17跨编译器实现问询

C++17 编译期目标架构字节序查询实现

以下实现完全基于编译器内置预定义宏,不需要构建系统参与,所有接口支持编译期求值,可直接用于constexpr上下文,适配GCC、Clang、MSVC三大主流编译器。

完整代码片段

#include <cstdint>

// 字节序枚举定义,与C++20 std::endian对齐,方便后续升级
enum class endian {
    little,
    big,
    mixed
};

// 编译器内置宏检测
#if defined(__GNUC__) || defined(__clang__)
#   if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
#       define PROJECT_ENDIAN_LITTLE 1
#   elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
#       define PROJECT_ENDIAN_BIG 1
#   else
#       define PROJECT_ENDIAN_MIXED 1
#   endif
#elif defined(_MSC_VER)
// MSVC 默认为小端架构,仅特殊嵌入式/主机平台为大端
#   if defined(_M_AMD64) || defined(_M_IX86) || defined(_M_ARM) || defined(_M_ARM64)
#       define PROJECT_ENDIAN_LITTLE 1
#   else
#       define PROJECT_ENDIAN_BIG 1
#   endif
#else
#   error "Unsupported compiler, please add endian detection logic manually"
#endif

// 编译期查询接口
constexpr endian get_system_endian() noexcept {
#if defined(PROJECT_ENDIAN_LITTLE)
    return endian::little;
#elif defined(PROJECT_ENDIAN_BIG)
    return endian::big;
#else
    return endian::mixed;
#endif
}

// 便捷常量,直接用于编译期分支判断
constexpr bool is_little_endian = get_system_endian() == endian::little;
constexpr bool is_big_endian = get_system_endian() == endian::big;
constexpr bool is_mixed_endian = get_system_endian() == endian::mixed;

// 测试用例
#include <iostream>
int main() {
    // 编译期断言验证
    static_assert(!is_mixed_endian, "Mixed endian architecture is not supported");

    // C++17 if constexpr 编译期分支,无运行时开销
    if constexpr (is_little_endian) {
        std::cout << "Target architecture: little endian\n";
    } else {
        std::cout << "Target architecture: big endian\n";
    }
    return 0;
}

适配说明

  • 支持编译器版本:GCC 5+, Clang 3.5+, MSVC 2017+
  • 所有接口均为constexpr,可直接用于模板参数、static_assert等编译期场景
  • 枚举定义与C20 std::endian 完全对齐,后续项目升级到C20可直接替换为标准库实现,无需修改业务代码

内容的提问来源于stack exchange,提问作者mcandre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:06:07