Sdílet prostřednictvím


C6268

upozornění C6268: chybné pořadí operací: (<TYPE1>)(<TYPE2>) x + y.Možná chybí závorky v (<TYPE1>) ((<TYPE2>) x + y)

Toto upozornění znamená při provádění aritmetických operací ukazatel může zahrnovat výrazem přetypování složitý problém přednost.Protože nádech seskupení lépe než binární operátory, výsledek nemusí být určeny programátor.V některých případech tato vada způsobuje nesprávné chování nebo selhání programu.

Ve výrazu, například:

(char *)p + offset

Posun je interpretován jako znaky; Avšak výraz:

(int *)(char *)p + offset

je ekvivalentní:

((int *)(char *)p) + offset

a tak posun interpretována jako posun v celých čísel.Jinými slovy je ekvivalentní:

(int *)((char *)p + (offset * sizeof(int)))

který není pravděpodobné, že určené programátor.

V závislosti na relativní velikosti dvou typů to může vést k přetečení vyrovnávací paměti.

Příklad

Následující kód vygeneruje toto upozornění:

void f(int *p, int offset_in_bytes)
{
    int *ptr;
    ptr = (int *)(char *)p + offset_in_bytes;
    // code ...
}

Chcete-li opravit toto upozornění, použijte následující kód:

void f(int *p, int offset_in_bytes)
{
    int *ptr;
    ptr = (int *)((char *)p + offset_in_bytes);
    // code ...
}