Namespaces
Variants

__STDC_ENDIAN_LITTLE__, __STDC_ENDIAN_BIG__, __STDC_ENDIAN_NATIVE__

From cppreference.net
Definido en el encabezado <stdbit.h>
#define __STDC_ENDIAN_LITTLE__ /* implementation-defined */
(1) (desde C23)
#define __STDC_ENDIAN_BIG__    /* implementation-defined */
(2) (desde C23)
#define __STDC_ENDIAN_NATIVE__ /* implementation-defined */
(3) (desde C23)

Indica el endianness de todos los scalar types :

  • Si todos los tipos escalares son little-endian, __STDC_ENDIAN_NATIVE__ es igual a __STDC_ENDIAN_LITTLE__ .
  • Si todos los tipos escalares son big-endian, __STDC_ENDIAN_NATIVE__ es igual a __STDC_ENDIAN_BIG__ .
  • Si la plataforma no utiliza ni little-endian ni big-endian, __STDC_ENDIAN_NATIVE__ no es igual ni a __STDC_ENDIAN_BIG__ ni a __STDC_ENDIAN_LITTLE__ .
  • Los valores de las expresiones constantes enteras para __STDC_ENDIAN_BIG__ y __STDC_ENDIAN_LITTLE__ no son iguales.

Ejemplo

#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__;
}

Salida posible:

mixed-endian

Véase también