Quel est l’effet secondaire de la macro suivante en C? C intégré

#define MIN(A,B) ((A) <= (B) ? (A) : (B)) 

c‘est la macro, on m’a demandé quel était l’effet secondaire si j’utilisais ce qui suit:

 least = MIN(*p++, b); 

Remarque: cette question était intégrée

Il évalue p++ deux fois. De plus, comme la première évaluation change p , la deuxième fois, elle indiquera un élément différent . La valeur renvoyée sera donc *(initialp + 1) ou b .

Tu devrais essayer toi-même.

La macro va s’étendre à:

 least = ((*p++)<=(b)?(*p++):(b)) 

vous aurez alors *p++ deux fois dans votre déclaration (c’est-à-dire qu’elle sera incrémentée deux fois).

*p++ est évalué deux fois lorsque la macro se développe en *p++ <= b ? *p++ : b *p++ <= b ? *p++ : b

De plus, il n’existe pas de "C intégré".

Supposons l’adresse initiale de p = 0xfcf0, * p = 1, b = 2, valeur @ 0xfcf4 = 5 et valeur @ 0xfcf8 = 15

La macro se développera comme

moins = ((* p ++) <= (b)? (* p ++): (b));

c’est-à-dire le moins = ((1) <= (2)? (* p ++): (b));

puisque * p est incrémenté deux fois.

1) * p ++ -> maintenant p va pointer sur l’adresse 0xfcf4;

2) * p ++ -> maintenant p désignera l’adresse 0xfcf8;

Donc moins = 15; (les valeurs dans l’adresse 0xfcf8). J’espère que ça aide.