Spec-Zone.ru › C

__STDC_ENDIAN_LITTLE__, __STDC_ENDIAN_BIG__, __STDC_ENDIAN_NATIVE__

Определено в заголовочном файле <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)

Определяет порядок байтов всех скалярных типов:

  • Если все скалярные типы используют порядок от младшего байта к старшему, __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

См. также

Документация по C++ для endian

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/numeric/bit/endian

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API