warning
pragma
啟用選擇性修改編譯器警告訊息的行為。
語法
#pragma warning(
warning-specifier
:
warning-number-list
[;
warning-specifier
:
warning-number-list
... ])
#pragma warning( push
[,
n ])
#pragma warning( pop )
備註
以下是可用的警告指定名稱參數。
警告指定名稱 | 意義 |
---|---|
1 、 、 2 、 3 4 |
將指定的層級套用至指定的警告。 也開啟預設為關閉的指定警告。 |
default |
將警告行為重設為預設值。 也開啟預設為關閉的指定警告。 警告會以其記載的預設層級產生。 如需詳細資訊,請參閱 默認關閉的編譯程式警告。 |
disable |
請勿發出指定的警告訊息。 |
error |
將指定的警告回報為錯誤。 |
once |
只顯示指定的訊息一次。 |
suppress |
推送堆疊上的 目前狀態 pragma 、停用下一行的指定警告,然後彈出警告堆棧,讓 pragma 狀態重設。 |
下列程式代碼語句說明warning-number-list
參數可以包含多個警告編號,而且可以在相同的 pragma 指示詞中指定多個warning-specifier
參數。
#pragma warning( disable : 4507 34; once : 4385; error : 164 )
這個指示字的功能相當於下列程式代碼:
// Disable warning messages 4507 and 4034.
#pragma warning( disable : 4507 34 )
// Issue warning C4385 only once.
#pragma warning( once : 4385 )
// Report warning C4164 as an error.
#pragma warning( error : 164 )
編譯器會將 0 和 999 之間的任何警告編號加上 4000。
範圍 4700-4999 中的警告編號與程式代碼產生相關聯。 針對這些警告,當編譯程式到達函式定義的函式定義時,警告的狀態會有效。 warning
pragma在函式中使用 來變更大於 4699 的警告編號狀態,只會在函式結尾之後生效。 下列範例顯示 的正確位置 warning
pragma ,以停用程式代碼產生警告訊息,然後加以還原。
// 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 Test ends
}
int main() {
int x;
int y = x; // C4700
}
請注意,在整個函式主體中,整個函式的最後一個設定 warning
pragma 都會生效。
Push 和 Pop
warning
pragma也支援下列語法,其中選擇性 n 參數代表警告層級 (1 到 4)。
#pragma warning( push [ , n ] )
#pragma warning( pop )
會 pragmawarning( push )
儲存每個警告的目前警告狀態。 會 pragmawarning( push, n )
儲存每個警告的目前狀態,並將全域警告層級設定為 n。
會 pragmawarning( pop )
彈出推送至堆疊的最後一個警告狀態。 您在和 pop
之間push
對警告狀態所做的任何變更都已復原。 請考慮此範例:
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
// Some code
#pragma warning( pop )
在此程式代碼結尾, pop
將每個警告的狀態(包括 4705、4706 和 4707)還原至程式代碼開頭的狀態。
當您撰寫頭檔時,您可以使用 push
和 pop
來保證使用者所做的警告狀態變更不會防止標頭正確編譯。 push
在標頭開頭與pop
結尾使用 。 例如,您可能有標頭未在警告層級 4 完全編譯。 下列程式代碼會將警告層級變更為 3,然後在標頭結尾還原原始警告層級。
#pragma warning( push, 3 )
// Declarations/definitions
#pragma warning( pop )
如需可協助您隱藏警告之編譯程式選項的詳細資訊,請參閱 /FI
和 /w
。