Avertissement C6268
Ordre incorrect des opérations : ('TYPE1')('TYPE2')x + y. Parenthèses manquantes possibles dans ('TYPE1')(('TYPE2')x + y)
Cet avertissement indique qu’une expression de cast complexe peut impliquer un problème de précédence lors de l’arithmétique du pointeur. Étant donné que les casts regroupent plus étroitement que les opérateurs binaires, le résultat peut ne pas être ce que le programmeur a prévu. Dans certains cas, ce défaut provoque un comportement incorrect ou un blocage du programme.
Notes
Dans une expression telle que :
(char *)p + offset
le décalage est interprété comme un décalage en caractères ; toutefois, une expression telle que :
(int *)(char *)p + offset
équivaut à :
((int *)(char *)p) + offset
et donc le décalage est interprété comme un décalage dans les entiers. En d’autres termes, il est équivalent à :
(int *)((char *)p + (offset * sizeof(int)))
ce qui n’est probablement pas ce que le programmeur a prévu.
Selon les tailles relatives des deux types, ce décalage peut entraîner un dépassement de mémoire tampon.
Nom de l’analyse du code : MISPARENTHESIZED_CASTS
Exemple
Le code suivant génère cet avertissement :
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)(char *)p + offset_in_bytes;
// code ...
}
Pour corriger cet avertissement, utilisez le code suivant :
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)((char *)p + offset_in_bytes);
// code ...
}