Léa-Linux & amis :   LinuxFR   GCU-Squad   Zarb.Org   GNU
Archive de la liste aide - [Aide] C, define, char * et optimisation
Bonjour Lea,

Ca fait longtemps que je ne t'ai pas posé de colle en C ...
Mais en voici une que je viens de rencontrer, et pour laquelle je ne trouve pas d'explication ...

Si l'on considère ce petit programme :

#include <stdio.h>
#define VAL "value"
void main(void)
{
        char * var = "value";

        if(var == VAL)
                printf("OK\n");
        else
                printf("KO ...\n");
}

On aura comme résultat à l'exécution "OK" !
Hé oui, le test "var == VAL" ne compare pas le contenu des chaines, mais directement les adresses des chaines.
Or comme var et VAL sont tous deux des constantes, le compilateur optimise en les stockant au même endroit.

D'ailleurs, si on liste les chaines dans l'exécutable avec la commande "strings", ca donne bien une seule occurrence de "value".


Sauf que ... bin justement si on affiche les adresses ... elles sont différentes !!
On rajoute à la fin du programme :
        printf("%s VS %s (%p vs %p)\n",var, VAL, &var, &VAL);

Et j'obtiens :
OK
value VS value (0x7fffa7485948 vs 0x400678)

Quelqu'un aurait une explication ?

Merci

Serveur hébergé par ST-Hebergement et Lost-Oasis / IRC hébergé par FreeNode / NS secondaire hébergé par XName
Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons