コンパイラの警告 (レベル 4、オフ) C4388

'token': 符号付きと符号なしの数値を比較しようとしました

token 演算子を使って signed とより大きな unsigned の数値を比較する場合、コンパイラは signed の値をより大きな unsigned 型に変換する必要がありました。

解説

この警告を修正する 1 つの方法は、signed 型とより大きな unsigned 型を比較するときに、2 つの型の一方をキャストする場合です。

既定では、この警告はオフに設定されています。 /Wall または /w44388 を使用して、コマンド ラインでレベル 4 警告として有効にできます。 または、ソース ファイルで #pragma warning(default:4388) を使用します。 詳細については、「既定で無効になっているコンパイラ警告」を参照してください。

この例では C4388 が生成され、その修正方法が示されています。

// C4388.cpp
// compile with: cl /EHsc /W4 C4388.cpp
#pragma warning(default: 4388)

int main() {
    unsigned long long uc = 0;
    int c = 0;
    unsigned long long c2 = c; // implicit conversion

    if (uc < c)                       // C4388
        uc = 0;

    if (uc < (unsigned long long)(c)) // OK
        uc = 0;

    if (uc < c2)                      // Also OK
        uc = 0;
}

関連項目

コンパイラの警告 (レベル 3) C4018
コンパイラ警告 (レベル 4) C4389