Bonjour à tous

En parcourant le code du moteur OpenSceneGraph, je suis tombé sur la fonction permettant de détecter l'endianness de la machine, en voici une version légèrement modifiée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
const char* getCpuByteOrder()
{
    union 
    {
        char big_endian_1[2];
        short is_it_really_1;
    } u;
    u.big_endian_1[0] = 0;
    u.big_endian_1[1] = 1;
 
    printf("%i\n", u.is_it_really_1);
 
    if (u.is_it_really_1 == 1)
        return "bigEngian";
    else 
        return "littleEndian";
}
Sur ma machine u.is_it_really_1 vaut 256 alors qu'il n'a pas été initialisé. Je ne vois pas non plus l'intérêt d'utiliser big_endian_1 (de plus c'est un tableau).
Comment fonctionne cette fonction ? Le type des variables est-il important ? Pourquoi utiliser une union ?

Kromagg