1. #pragma warning只對當前檔案有效(對於.h,對包含它的cpp也是有效),而不是對整個工程的所有檔案有效。當該檔案編譯結束,設定也就失去作用。
2. #pragma warning(push)
儲存當前警示設定。
#pragma warning(push, n)
儲存當前警示設定,並設定警示層級為n。n為從1到4的自然數。
3. #pragma warning(pop)
恢複之前壓入堆棧的警示設定。在一對push和pop之間作的任何警示相關設定都將失效。
4. #pragma warning(disable: n)
將某個警報置為失效
5. #pragma warning(default: n)
將警示置為預設
6. 某些警告如C4309是從上到下生效的。即檔案內#pragma warning從上到下遍曆,依次生效。
例如:
void func()
{
#pragma warning(disable: 4189)
char s;
s = 128;
#pragma warning(default: 4189)
char c;
c = 128;
}
則s = 128不會產生C4309警示,而C4309會產生警示。
7. 某些警告例如C4189是以函數中最後出現的#pragma warning設定為準的,其餘針對該警示的設定都是無效的。
例如:
void func()
{
#pragma warning(disable: 4189)
int x = 1;
#pragma warning(default: 4189)
}
則C4189仍然會出現,因為default指令是函數的最後一條。在該檔案內的其他函數中,如果沒有重新設定,C4189也是以#pragma warning(default: 4189)為準。如果重新設定,同樣是按照其函數中的最後一個#pragma warning為準。
8. 某些警告(MSDN認為是大於等於C4700的警告)是在函數結束後才會生效。
例如:
#pragma warning(disable:4700)
void Func()
{
int x;
int y = x;
#pragma warning(default:4700)
int z= x;
}
則y = x和z = x都不會產生C4700警示。只有在函數結束後的後的另外一個函數中,#pragma warning(default:4700)才會生效。