通過預編譯設定警告,通過方式為#pragma warning
具體方式如下:
1) #pragma warning隻對目前檔案有效(對于.h,對包含它的cpp也是有效的),而不是對整個工程的所有檔案有效。當該檔案編譯結束,設定也就失去作用。
2) #pragma warning(push)存儲目前報警設定。
3)#pragma warning(push, n)存儲目前報警設定,并設定報警級别為n。n為從1到4的自然數。
4)#pragma warning(pop)恢複之前壓入堆棧的報警設定。在一對push和pop之間作的任何報警相關設定都将失效。
5) #pragma warning(disable: n)将某個警報置為失效
6) #pragma warning(default: n)将報警置為預設
7) 某些警告是從上到下生效的。
即檔案内#pragma warning從上到下周遊,依次生效。
例如:
void func()
{
#pragma warning(disable: 4189)
char s;
s = 128;
#pragma warning(default: 4189)
char c;
c = 128;
}
則s = 128不會産生C4309報警,而c = 128會産生報警。
8)某些警告是以函數中最後出現的#pragma warning設定為準的,其餘針對該報警的設定都是無效的。
例如:
void func()
{
#pragma warning(disable: 4189)
int x = 1;
#pragma warning(default: 4189)
}
則C4189仍然會出現,因為default指令是函數的最後一條。在該檔案内的其他函數中,如果沒有重新設定,C4189也是以#pragma warning(default: 4189)為準。如果重新設定,同樣是按照其函數中的最後一個#pragma warning為準。
9) 某些警告(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)才能生效。