_CRT_SECURE_NO_WARNINGS宏-转
正如大家所知,如果我們寫出這樣的代碼:
1int?_tmain(int?argc, _TCHAR*?argv[])
2{
3???? fopen("test.txt","r");
4????return?0;
5}
?
在vs 2005,2008下,會收到如下警告:
c:"documents and settings"administrator"桌面"test"test.cpp(9) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
?? c:"program files"microsoft visual studio 8"vc"include"stdio.h(234) : 參見“fopen”的聲明
?
正如這個警告所言,產生的原因時這個方法不是安全的CRT,當然,建議使用安全的CRT,但如果不想用(有時候為了安全性,得多寫幾行代碼),要禁止這個警告 ,得定義一個宏
#define _CRT_SECURE_NO_WARNINGS
?
一開始,我以為這個宏應該出現在fopen (當然,以及類示CRT)之間。但事實上應該是將這個宏定義在stdio.h之前。
?
也就是說,如下代碼還是會報這個警告:
1#define?_CRT_SECURE_NO_WARNINGS2int?_tmain(int?argc, _TCHAR*?argv[])
3{
4???? fopen("test.txt","r");
5????return?0;
6}
?
正確的做法應該是
1#define?_CRT_SECURE_NO_WARNINGS2#include?<stdio.h>
?
問題是解決了,回過頭來一想,我怎么會有這樣的想法呢,這個方法本身的編譯應該在調用之前嘛,
唉,一時糊涂。看看這個方法體的定義:
1_CRT_INSECURE_DEPRECATE(fopen_s) _CRTIMP __checkReturn FILE?*?__cdecl fopen(__in_z?const?char?*?_Filename, __in_z?const?char?*?_Mode);?
1#ifndef _CRT_INSECURE_DEPRECATE2#ifdef _CRT_SECURE_NO_WARNINGS
3#define?_CRT_INSECURE_DEPRECATE(_Replacement)
4#else
5#define?_CRT_INSECURE_DEPRECATE(_Replacement) _CRT_DEPRECATE_TEXT("This function or variable may be unsafe. Consider using " #_Replacement " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")
6#endif7#endif
8
總結
以上是生活随笔為你收集整理的_CRT_SECURE_NO_WARNINGS宏-转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Random快速连续产生不相同随机数
- 下一篇: 快速构建Windows 8风格应用31-