如何在Visual Studio中执行含未初始化变量的代码以打印垃圾值?
如何在Visual Studio中运行含未初始化变量的代码以观察垃圾值?
你提到想通过未初始化变量打印垃圾值,但Visual Studio运行时没有“忽略并执行”的选项——这是因为VS默认开启了严格的安全检查机制,会主动拦截这类可能导致未定义行为的代码。下面是几个能让你顺利运行这段代码的方法:
方法1:全局关闭项目的SDL安全检查
这是最直接的方式,操作步骤如下:
- 右键你的项目(不是整个解决方案),选择「属性」
- 依次进入「配置属性」->「C/C++」->「常规」
- 找到「SDL检查」选项,将其修改为「否」
- 也可以额外进入「配置属性」->「C/C++」->「代码生成」,把「安全检查」设置为「禁用安全检查(/GS-)」
修改完成后点击「确定」,重新编译运行就能看到未初始化变量的垃圾值输出了。
方法2:仅针对特定代码禁用警告
如果你不想全局关闭安全检查,只想让这段测试代码通过编译运行,可以在触发警告的代码前添加编译指令,屏蔽未初始化变量的特定警告:
#include <stdio.h> void scopes(); void localvar(); // 禁用未初始化局部变量的警告(C4700) #pragma warning(disable: C4700) int main(void) { localvar(); return 0; } void localvar() { int m; int n = 10; printf("%d %d\n", m, n); for (m = 0; m < 3; m++) { auto int sum = 0; sum = m; printf("%d %d\n", m, sum); } return; }
这样编译时只会屏蔽这段代码的C4700警告,项目中其他代码依然会受到安全检查的保护。
小提示:从C语言标准来说,未初始化局部变量的行为属于未定义行为,Visual Studio的安全检查其实是在帮你规避潜在的程序崩溃或异常问题,只是你为了学习观察垃圾值才需要临时关闭这些检查哦。
内容的提问来源于stack exchange,提问作者송효근
相关产品推荐
相关产品推荐

