共用方式為


warning pragma

啟用編譯程式警告訊息行為的選擇性修改。

語法

#pragma warning(
 [ ]
 [ ... ]
[ n ]
#pragma warning( pop )

言論

下列 warning-specifier 參數可供使用。

warning-specifier (警告說明符) 意義
、、、 將指定的層級套用至指定的警告。 例如: 關閉警告 5033(通常是 1 級警告),除非警告級別設置為 或更高。 還可用於打開預設情況下處於關閉狀態的指定警告。
default 將警告行為重設為其預設值。 也開啟預設為關閉的指定警告。 系統會在其預設、記載的層級產生警告。

如需詳細資訊,請參閱默認關閉的編譯程式警告
disable 請勿發出指定的警告訊息。 允許optional 屬性。
error 將指定的警告報告為錯誤。
once 只顯示指定的訊息一次。
suppress 推送堆疊上 的目前狀態、停用下一行的指定警告,然後快顯警告堆棧,讓 狀態重設。
justification 可選字串描述停用或抑制警告的原因。 於 Visual Studio 2022 版本 17.14 中引入。

下列程式代碼語句說明 參數可以包含多個警告編號,而且可以在相同的 指示詞中指定多個 參數。

#pragma warning( disable : 4507 4034; once : 4385; error : 164 )

但是,當該欄位存在時 ,只能指定一個警告編號。 以下代碼語句說明瞭該 欄位的用法。

#pragma warning( disable : 4507, justification : "This warning is disabled" )

利用該 欄位說明為何警告被停用或抑制。 這個欄位僅支援 與 。 當選項被指定時,對齊會出現在靜態分析結果交換格式(SARIF)輸出中。 它的值是UTF-8編碼的窄字串文字。 要產生 SARIF 檔案,請使用 編譯器選項。

這個指示字的功能相當於下列程式代碼:

// Disable warning messages 4507 and 4034.
#pragma warning(disable : 4507 4034)

// Issue warning C4385 only once.
#pragma warning(once : 4385)

// Report warning C4164 as an error.
#pragma warning(error : 164)

編譯程式會將 4000 新增至介於 0 到 999 之間的任何警告編號。

範圍 4700-4999 中的警告編號與程式代碼產生相關聯。 針對這些警告,當編譯程式到達函式定義的函式定義時,警告的狀態會有效。 使用 函式中的 來變更大於 4699 的警告編號狀態,只會在函式結尾之後生效。 下列範例顯示正確的 位置,以停用程式代碼產生警告訊息,然後加以還原。

// pragma_warning.cpp
// compile with: /W1
#pragma warning(disable:4700)
void Test()
{
   int x;
   int y = x; // no C4700 here
   #pragma warning(default:4700)   // C4700 enabled after compiling Test()
}

int main()
{
   int x;
   int y = x; // C4700
}

請注意,在整個函式主體中, 的最後一個設定將會對整個函式生效。

推送和快顯

也支援下列語法,其中選擇性 n 參數代表警告層級(1 到 4)。

#pragma warning( push [ , n ] )

#pragma warning( pop )

會儲存每個警告的目前警告狀態。 會儲存每個警告的目前狀態,並將全域警告層級設定為 n。

會彈出推送至堆疊的最後一個警告狀態。 您對 與 之間的警告狀態所做的任何變更都已復原。 請考慮下列範例:

#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
// Some code
#pragma warning( pop )

在此程式代碼結尾, 將每個警告的狀態(包括 4705、4706 和 4707)還原至程式代碼開頭的狀態。

當您撰寫頭檔時,您可以使用 和 來保證使用者所做的警告狀態變更不會防止標頭正確編譯。 在標頭開頭使用 ,並在結尾處 。 例如,您可能有標頭未在警告層級 4 完全編譯。 下列程式代碼會將警告層級變更為 3,然後在標頭結尾還原原始警告層級。

#pragma warning( push, 3 )
// Declarations/definitions
#pragma warning( pop )

在 和 之間 選擇

兩者皆提供對警告抑制的細緻控制:

  • [[gsl::suppress]] 僅抑制由 C++ Code Analysis 發出的警告Microsoft。 搭配 C++ 核心指引檢查一起使用,這些檢查可以套用到作用域或特定宣告。
  • 可用於任何編譯器警告。 當你需要在不大幅改變程式碼結構的情況下,抑制特定程式碼區塊的警告時,它非常有用。

盡可能使用 [[gsl::suppress]] 來抑制Microsoft C++ Code Analysis警告。

如需可協助您隱藏警告之編譯程式選項的詳細資訊,請參閱 和 。

另請參閱

Pragma 指示詞和 和 關鍵詞