關於#pragma warning
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. 某些警告如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)
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)才能生效。