关于 _CRT_SECURE_NO_WARNINGS

  vs系列的IDE中,使用scanf等函数会收到编译器警告warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.这里讲到可以使用_CRT_SECURE_NO_WARNINGS消除警告。这里有一个奇怪的现象。

  如果代码是

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

编译正常。的确成功消除警告。

  但是有的新手加宏的时候是这样写的

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS

这时候编译依然会出现警告。

好奇心驱使我围观一下这个宏是怎么返回作用的。#include<stdio.h> 上面右键 可以打开这个文档 



然后,我们可以找到 scanf函数的声明

这里有几个宏,部分宏和要讲的内容无关。这里不做展开,有兴趣的同学可以单独探索。
我们要讲的是这个宏: _CRT_INSECURE_DEPRECATE 全文件最靓的仔。可以鼠标选中,然后按下 F12。
能看到这个宏的完整实现:

 

    #ifdef _CRT_SECURE_NO_WARNINGS
        #define _CRT_INSECURE_DEPRECATE(_Replacement)
    #else
        #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.")
    #endif


如果,有定义宏  _CRT_SECURE_NO_WARNINGS,那么 

        #define _CRT_INSECURE_DEPRECATE(_Replacement)


于是 _CRT_INSECURE_DEPRECATE(scanf_s) 展开就是空的

如果没有定义宏 _CRT_SECURE_NO_WARNINGS
那么

        #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.")


于是 _CRT_INSECURE_DEPRECATE(scanf_s) 展开就是
_CRT_DEPRECATE_TEXT(    \
            "This function or variable may be unsafe. Consider using "        \
            "scanf_s"                                                    \
            " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " \
            "See online help for details.")

这里我们看到一个新的宏,_CRT_DEPRECATE_TEXT。按照之前的做法,按下F2,可以看到 :

这是什么东西?老实说我也看不懂,不过不要紧, 我们有万能的网络。
不过在这里,我提供一种网络以外的做法。我们可以自己试试 。
于是 

骚操作出现了,咳咳,现在可以玩玩编译提示了。

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值