[Aide] C, define, char * et optimisation

Thomas Revise thomas at anakrome.net
Tue Jun 11 23:11:31 CEST 2013


Peut etre vais je dire une betise mais ce sont les valeurs qui sont
comparées ici.
Si tu souhaites egalement comparer le typage il faut utiliser ===
Enfin peut être me trompe-je.
Thomas.
 Le 11 juin 2013 22:36, <linuxprocess at free.fr> a écrit :

> 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
> _______________________________________________
> Aide mailing list
> Aide at lea-linux.org
> http://lists.lea-linux.org/cgi-bin/mailman/listinfo/aide
>


More information about the Aide mailing list