Namespaces
Variants

__STDC_ENDIAN_LITTLE__, __STDC_ENDIAN_BIG__, __STDC_ENDIAN_NATIVE__

From cppreference.net
Défini dans l'en-tête <stdbit.h>
#define __STDC_ENDIAN_LITTLE__ /* implementation-defined */
(1) (depuis C23)
#define __STDC_ENDIAN_BIG__    /* implementation-defined */
(2) (depuis C23)
#define __STDC_ENDIAN_NATIVE__ /* implementation-defined */
(3) (depuis C23)

Indique l' endianness de tous les types scalaires :

  • Si tous les types scalaires sont en little-endian, __STDC_ENDIAN_NATIVE__ est égal à __STDC_ENDIAN_LITTLE__ .
  • Si tous les types scalaires sont en big-endian, __STDC_ENDIAN_NATIVE__ est égal à __STDC_ENDIAN_BIG__ .
  • Si la plateforme n'utilise ni le little-endian ni le big-endian, __STDC_ENDIAN_NATIVE__ n'est égal ni à __STDC_ENDIAN_BIG__ ni à __STDC_ENDIAN_LITTLE__ .
  • Les valeurs des expressions constantes entières pour __STDC_ENDIAN_BIG__ et __STDC_ENDIAN_LITTLE__ ne sont pas égales.

Exemple

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

Sortie possible :

mixed-endian

Voir aussi