Visual Studio解决C4996 scanf不安全警告,一劳永逸永久配置

Visual Studio解决C4996 scanf不安全警告,一劳永逸永久配置

环境:Visual Studio,写C语言代码使用scanf报C4996警告,两种解决方案,推荐修改模板文件,新建文件自动带上宏定义,不用每次手动写。

报错现象

写普通C语言scanf代码,VS抛出警告:

C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
C6031 返回值被忽略: "scanf"。

两个解决思路

  1. 改用scanf_s
    scanf_sVS编译器专属函数,不是C语言标准库函数。

缺点:代码拷贝到 GCC、Dev‑C++、Clang 其他编译器直接编译报错,丧失跨平台兼容性,不推荐学习C语言的时候使用。

  1. 定义宏 #define _CRT_SECURE_NO_WARNINGS(推荐)
    关闭VS的安全检查警告,保留标准C语言scanf,代码可以跨编译器运行。

方法1:单次生效(当前文件)

整个代码文件的最最第一行写宏定义,必须放在#include前面。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int a;
    scanf("%d", &a);
    printf("%d",a);
    return 0;
}

缺点:每次新建.c/.cpp源文件,都要手动复制这一行,重复劳动。

方法2:一劳永逸永久配置⭐(重点)

VS新建C/C++源文件的时候,本质是拷贝一份模板文件newc++file.cpp
我们修改这个模板,以后每新建源文件,自动第一行带上#define _CRT_SECURE_NO_WARNINGS,不用手动写。

步骤1:下载Everything文件搜索工具

工具官网:https://www.voidtools.com/zh‑cn/downloads/
下载【安装版】,根据你的系统选择32位/64位。

Everything可以秒搜电脑全部文件,以后找任何难找的系统文件都非常方便。
在这里插入图片描述

步骤2:搜索模板文件 newc++file.cpp

打开Everything,直接输入文件名搜索。

⚠️注意:会搜出来很多同名文件,一定要选中属于你Visual Studio安装目录下的那一个!
路径示例:
E:\ruanjian\visual studio\Common7\IDE\VC\VCProjectItems\newc++file.cpp

在这里插入图片描述

步骤3:修改模板文件

  1. 右键搜索结果 → 打开路径,跳转到该文件所在文件夹。
  2. 复制newc++file.cpp到桌面(不要直接在原目录修改,权限不足保存失败)
  3. 使用记事本打开桌面这份newc++file.cpp
  4. 在文件第一行写入:
#define _CRT_SECURE_NO_WARNINGS

保存文件。

步骤4:替换回原目录

把桌面修改好的newc++file.cpp,复制粘贴回VS原来的文件夹,提示权限,点击继续,完成替换。

在这里插入图片描述

✅验证效果

关闭VS,重新打开,新建一个C++源文件。

新建出来的文件第一行自动出现 #define _CRT_SECURE_NO_WARNINGS,之后写scanf再也不会报C4996警告。

小提示:C6031“返回值被忽略”是另外一个警告,提示接收scanf返回值,不影响编译运行,可以忽略。

常见踩坑总结

  1. ❌不要直接在原目录编辑保存,权限不足会保存失败,复制到桌面修改再替换回去
  2. ❌不要改错别的newc++file.cpp,必须是VS安装目录Common7\IDE\VC\VCProjectItems下。
  3. ❌宏定义必须放在模板文件第一行,放在#include后面是无效的。
  4. ❌不要使用scanf_s做练习,标准C语言没有这个函数,换编译器直接跑不了。

这篇文章也是我在学习 C 语言过程中遇到的一个小问题,想着把解决过程记录下来,方便以后自己查,也希望能够帮助刚开始使用 Visual Studio 学习 C 语言的朋友。

如果文章中有理解不到位或者表述不准确的地方,也欢迎大家指出和交流。

如果这篇文章对你有帮助,欢迎点赞、收藏、评论,一键三连!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值