Namespaces
Variants

__STDC_ENDIAN_LITTLE__, __STDC_ENDIAN_BIG__, __STDC_ENDIAN_NATIVE__

From cppreference.net
ヘッダで定義 <stdbit.h>
#define __STDC_ENDIAN_LITTLE__ /* implementation-defined */
(1) (C23以降)
#define __STDC_ENDIAN_BIG__    /* implementation-defined */
(2) (C23以降)
#define __STDC_ENDIAN_NATIVE__ /* implementation-defined */
(3) (C23以降)

すべての endianness を示します scalar types :

  • すべてのスカラー型がリトルエンディアンの場合、 __STDC_ENDIAN_NATIVE__ __STDC_ENDIAN_LITTLE__ と等しい。
  • すべてのスカラー型がビッグエンディアンの場合、 __STDC_ENDIAN_NATIVE__ __STDC_ENDIAN_BIG__ と等しい。
  • プラットフォームがリトルエンディアンでもビッグエンディアンでもない場合、 __STDC_ENDIAN_NATIVE__ __STDC_ENDIAN_BIG__ とも __STDC_ENDIAN_LITTLE__ とも等しくない。
  • __STDC_ENDIAN_BIG__ __STDC_ENDIAN_LITTLE__ の整数定数式の値は等しくない。

#include <stdbit.h>
#include <stdio.h>
int main()
{
    switch(__STDC_ENDIAN_NATIVE__)
    {
        case __STDC_ENDIAN_LITTLE__:
            printf("__STDC_ENDIAN_LITTLE__\n");
            break;
        case __STDC_ENDIAN_BIG__:
            printf("__STDC_ENDIAN_BIG__\n");
            break;
        default:
            printf("mixed-endian\n");
    }
    return __STDC_ENDIAN_NATIVE__;
}

出力例:

mixed-endian

関連項目