1. 程式人生 > >關於#pragma warning

關於#pragma warning

1.       #pragma warning只對當前檔案有效(對於.h,對包含它的cpp也是有效的),而不是對整個工程的所有檔案有效。當該檔案編譯結束,設定也就失去作用。

2.       #pragma warning(push)

儲存當前報警設定。

#pragma warning(push, n)

儲存當前報警設定,並設定報警級別為nn為從14的自然數。

3.       #pragma warning(pop)

恢復之前壓入堆疊的報警設定。在一對pushpop之間作的任何報警相關設定都將失效。

4.       #pragma warning(disable: n)

將某個警報置為失效

5.       #pragma warning(default: n)

將報警置為預設

6.       某些警告如C430Array是從上到下生效的。即檔案內#pragma warning從上到下遍歷,依次生效。

例如:

void func()

{

      #pragma warning(disable: 418Array)

      char s;

      s = 128;

      #pragma warning(default: 418Array)

      char c;

      c = 128;

}

s = 128不會產生C430Array報警,而C430Array

會產生報警。

7.       某些警告例如C418Array是以函式中最後出現的#pragma warning設定為準的,其餘針對該報警的設定都是無效的。

例如:

void func()

{

      #pragma warning(disable: 418Array)

      int x = 1;

      #pragma warning(default: 418Array)

}

C418Array仍然會出現,因為default指令是函式的最後一條。在該檔案內的其他函式中,如果沒有重新設定,C418Array也是以#pragma warning(default: 418Array)

為準。如果重新設定,同樣是按照其函式中的最後一個#pragma warning為準。

8.       某些警告(MSDN認為是大於等於C4700的警告)是在函式結束後才能生效。

例如:

#pragma warning(disable:4700)

void Func()

{

int x;

int y = x;  

          #pragma warning(default:4700)  

           int z= x;

}

y = xz = x都不會產生C4700報警。只有在函式結束後的後的另外一個函式中,#pragma warning(default:4700)才能生效。