共用方式為


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 ...
}