C6268
更新:2007 年 11 月
警告 C6268: 不正確的作業順序: (<TYPE1>)(<TYPE2>)x + y。(<TYPE1>)((<TYPE2>)x + y) 中可能遺漏括號
這則警告表示複雜轉型 (Cast) 運算式在執行指標算術時可能發生優先順序問題。因為轉型群組比二元 (Binary) 運算子更接近,所以結果可能不是程式設計人員所要的。在部分情況下,這項缺失會造成不正確的行為或程式損毀。
在下列運算式中:
(char *)p + offset
offset 是解譯成字元中的位移 (Offset)。然而,下列運算式:
(int *)(char *)p + offset
等於:
((int *)(char *)p) + offset
因此 offset 是解譯成整數的位移。換言之,它等於:
(int *)((char *)p + (offset * sizeof(int)))
而這可能不是程式設計人員所要的結果。
視這兩個型別的相對大小而定,這會導致緩衝區滿溢 (Buffer Overrun)。
範例
下列程式碼將產生出這個警告:
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)(char *)p + offset_in_bytes;
// code ...
}
若要更正這則警告,請使用下列程式碼:
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)((char *)p + offset_in_bytes);
// code ...
}