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"。
两个解决思路
- 改用
scanf_s
scanf_s是VS编译器专属函数,不是C语言标准库函数。
缺点:代码拷贝到 GCC、Dev‑C++、Clang 其他编译器直接编译报错,丧失跨平台兼容性,不推荐学习C语言的时候使用。
- 定义宏
#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:修改模板文件
- 右键搜索结果 →
打开路径,跳转到该文件所在文件夹。 - 复制
newc++file.cpp到桌面(不要直接在原目录修改,权限不足保存失败) - 使用记事本打开桌面这份
newc++file.cpp - 在文件第一行写入:
#define _CRT_SECURE_NO_WARNINGS
保存文件。
步骤4:替换回原目录
把桌面修改好的newc++file.cpp,复制粘贴回VS原来的文件夹,提示权限,点击继续,完成替换。

✅验证效果
关闭VS,重新打开,新建一个C++源文件。
新建出来的文件第一行自动出现
#define _CRT_SECURE_NO_WARNINGS,之后写scanf再也不会报C4996警告。
小提示:C6031“返回值被忽略”是另外一个警告,提示接收scanf返回值,不影响编译运行,可以忽略。
常见踩坑总结
- ❌不要直接在原目录编辑保存,权限不足会保存失败,复制到桌面修改再替换回去。
- ❌不要改错别的
newc++file.cpp,必须是VS安装目录Common7\IDE\VC\VCProjectItems下。 - ❌宏定义必须放在模板文件第一行,放在
#include后面是无效的。 - ❌不要使用
scanf_s做练习,标准C语言没有这个函数,换编译器直接跑不了。
这篇文章也是我在学习 C 语言过程中遇到的一个小问题,想着把解决过程记录下来,方便以后自己查,也希望能够帮助刚开始使用 Visual Studio 学习 C 语言的朋友。
如果文章中有理解不到位或者表述不准确的地方,也欢迎大家指出和交流。
如果这篇文章对你有帮助,欢迎点赞、收藏、评论,一键三连!


5451

被折叠的 条评论
为什么被折叠?



