編譯器警告 (層級 1 和層級 4) C4700

未初始化的區域變數 ' name ' 已使用

備註

區域變數 名稱 已在 指派值之前使用 ,也就是讀取自 變數名稱。 在 C 和 C++ 中,本機變數預設不會初始化。 未初始化的變數可以包含任何值,而且其使用會導致未定義的行為。 警告 C4700 幾乎一律表示可能導致程式無法預期的結果或當機的錯誤。

若要修正此問題,您可以在宣告區域變數時初始化區域變數,或在使用它們之前指派值給它們。 函式可用來初始化當做參考參數傳遞的變數,或當其位址當做指標參數傳遞時。

[啟用其他安全性檢查] 編譯器選項會將 /sdl 這個警告提升為錯誤。

範例

當變數 tuv 在初始化之前,這個範例會產生 C4700,並顯示可能導致的垃圾值種類。 變數 xyz 不會造成警告,因為它們在使用之前會先初始化:

// c4700.cpp
// compile by using: cl /EHsc /W4 c4700.cpp
#include <iostream>

// function takes an int reference to initialize
void initialize(int& i)
{
    i = 21;
}

int main()
{
    int s, t, u, v;   // Danger, uninitialized variables

    s = t + u + v;    // C4700: t, u, v used before initialization
    std::cout << "Value in s: " << s << std::endl;

    int w, x;         // Danger, uninitialized variables
    initialize(x);    // fix: call function to init x before use
    int y{10};        // fix: initialize y, z when declared
    int z{11};        // This C++11 syntax is recommended over int z = 11;

    w = x + y + z;    // Okay, all values initialized before use
    std::cout << "Value in w: " << w << std::endl;
}

執行此程式碼時, tuv 未初始化,且 的 s 輸出無法預測:

Value in s: 37816963
Value in w: 42