【问题标题】:How to make 'C4700: uninitialized local variable' be an error in Release mode如何在发布模式下使“C4700:未初始化的局部变量”成为错误
【发布时间】:2016-02-18 16:04:43
【问题描述】:

嗯,这是我的问题。我不知道如何在发布模式下实现这一点,因为编译器甚至没有发出警告(我知道如何从警告中强制出错——使用 /we 选项)。我尝试过调整几个选项,包括将警告级别提高到 ALL;我尽我所能在谷歌上搜索,并尝试了微软关于这个警告的文档,没有好的结果,我已经没有想法了。

我正在使用 Visual Studio 2012。

任何帮助表示赞赏。

【问题讨论】:

  • 您确定您没有在属性页中仅配置调试模式吗?
  • @LogicStuff 我不确定你的意思。在调试模式下会收到警告,我知道如何强制出错,但在发布模式下,我不会收到任何警告级别的警告。我不知道是否有一个标志覆盖它,谷歌搜索变成了空的。
  • 您是否在使用任何第三方库。也许其中之一是设置#pragma warning( error : 4700 )
  • 也许它没有在发布中使用。如int i; ASSERT(i == 1);
  • @LogicStuff 最终,我将在命令行中使用 msbuild 工具,是的。但目前,我直接在 IDE 上编译。是的,我很小心地为每种情况设置选项,调试或发布

标签: c++ visual-studio compiler-errors


【解决方案1】:

我发现了问题。问题是这部分代码位于组成我的解决方案的几个项目之一中(这个特定的项目生成一个静态库),并且在发布模式下,“整个程序优化”默认标记为“使用链接时间代码生成” (/GL)。错误确实会出现,但仅在链接时间!由于我只是编译源码,之前没有看到。

我认为这是一个缺点,但我猜编译器不会事先知道这部分代码是否会被剥离。尽管如此,编译器能否更早地检测到这一点?我的解决方案需要几分钟才能编译,之后我才看到错误。线索是,当我关闭整个程序优化时,我立即看到了错误。

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 2023-03-25
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多