?????? 對于編譯器警告,當然可以用 #pragma warning(disable: xxxx ) 的語法將其禁止掉,但是關閉這個警告并不正常,因為這樣一來,所有過時的函數都不會再警告了,而我們可能是需要這個警告的。
?????? 像是對于 strcpy 這種超常用的函數,考慮到安全性(應對緩沖區溢出攻擊),我們的確應該使用其安全版本,例如 strcpy 就有對應的 StringCchCopy/StringCbCopy 這樣的函數,如果關閉了此警告,我們就可能在代碼中不小心寫下 strcpy ,而不是其對應的安全版本(當然, strcpy 等函數是特例,關閉 C4995 警告后,仍然會有其他警告,下面有說明)。
?
?????? 所以,考察上述幾個函數,我們知道其函數聲明所在的頭文件,這些頭文件中的函數應該都不會用到,所以可以用另一種方式來避免引入這些頭文件:
?
????? 在你的工程的預編譯頭文件(一般來說,就是 stdafx.h )中,在 #pragma once 一行后面加上下列三行:
?
1.#define _CSTDIO_
2.#define _CSTRING_
3.#define _CWCHAR_
這樣,編譯器就不會再加載 cstdio / cstring / cwchar 這幾個頭文件了。
?
注意:
????? 使用 #pragma warning(disable: xxxx) 這種方式關閉警告后,如果代碼里面用到了 strcpy 這樣的函數,編譯器會報另一個警告:
?
1.1>e:\work\ncksoft\test\main.cpp(126) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
2.1> ??????? d:\program\msvs2008\vc\include\string.h(74) : see declaration of 'strcpy'
????? 所以我們仍然可以得到想要的警告信息。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
