天天看點

警告設定(c++)

通過預編譯設定警告,通過方式為#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)才能生效。

c++

繼續閱讀