關於#pragma warning

來源:互聯網
上載者:User

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)才會生效。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.