警告 C6268
操作の順序が正しくありません: ('TYPE1')('TYPE2')x + y。 ('TYPE1')(('TYPE2')x + y) にかっこが見つからない可能性があります
この警告は、ポインター演算を実行するときに、複雑なキャスト式に優先順位の問題が含まれる可能性があることを示します。 キャストはバイナリ演算子よりも厳密にグループ化されるため、結果はプログラマが意図したものではない可能性があります。 この不具合によって、不適切な動作やプログラムのクラッシュが発生することがあります。
解説
次のような式があるとします。
(char *)p + offset
オフセットは、文字のオフセットとして解釈されます。ただし、次のような式があります。
(int *)(char *)p + offset
は以下に匹敵します。
((int *)(char *)p) + offset
オフセットは、整数のオフセットとして解釈されます。 言い換えると、これは次のようになります。
(int *)((char *)p + (offset * sizeof(int)))
これはプログラマが意図したものではない可能性があります。
2 種類の相対サイズによっては、このオフセットによってバッファー オーバーランが発生する可能性があります。
コード分析名: MISPARENTHESIZED_CASTS
例
この警告が発生するコード例を次に示します。
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 ...
}
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示