• [^] # Re: Ce n'est pas spécifique à gcc 4

    Posté par (site web personnel) . En réponse au journal De gcc3 à gcc4 : Un code plus propre ?. Évalué à 3.

    > vu que t'ecris qu'un octet ca sera la meme chose sur toute les archi,

    Ben justement non. Tu écrit un octet sur 4, la question, c'est si tu écris sur les bits de poids fort ou sur les bits de poids faibles, et ça, ça dépends de l'endianness de ta machine. Exemple:


    $ cat endian.c
    #include <stdio.h>

    int main() {
    int x = 0x01020304;
    int * px = &x;
    printf("%x\n", *px);
    *(char *)px = 'a';
    printf("%x\n", *px);
    }

    $ uname -a
    SunOS asti 5.9 Generic_117171-09 sun4u sparc SUNW,Sun-Fire-V240
    $ /usr/local/soft/gcc/3.0.2/bin/gcc endian.c
    $ ./a.out
    1020304
    61020304

    $ uname -a
    Linux ecrins 2.4.27-2-k7-smp #1 SMP Thu Jan 20 11:33:07 JST 2005 i686 GNU/Linux
    $ /usr/local/soft/gcc/3.0.2/bin/gcc endian.c
    $ ./a.out
    1020304
    1020361


    > D'ailleur si cela avait avoir avec la portabilite ca ferait longtemps que ca serait corrige
    > dans certaines distributions multi-archi.

    En C ANSI, tu peux très bien faire du code endian-dependant (il suffit d'avoir droit aux cast de pointeurs). Le C *peut* être portable, si on ne fait pas de conneries avec, mais c'est pas la philosophie du language de t'empêcher d'en faire.