1

假设我有文件a.cppb.cpp并且a.cppb.cpp. 我修复了错误b.cpp并重新编译——因为 Visual Studio 不必重新编译a.cpp,它不会提醒我之前发现的警告。

我想以某种方式让警告持续存在;但是,我希望它把警告视为错误(我希望它仍然编译/运行,即使有警告)。这可能吗?

4

6 回答 6

3

您可以进入项目设置并在 C/C++ 选项卡(类别:常规)中将所有警告设置为错误。

于 2008-12-21T20:32:53.500 回答
1

从本质上讲,你不走运。C++ 编译将丢弃所有错误和警告。因为它只重新编译缺少 .OBJ 文件的 .CPP 文件(即上次出现错误和失败的文件),所以您只会看到错误。

你有几个选择。在我的头顶上:

  • 编写一个响应构建完成事件的宏。如果它看到任何警告,它可以删除 .OBJ 文件。.CPP 文件将在下次再次编译。不幸的是,这意味着如果不重新编译,您的程序可能无法运行。
  • 您可以编写一个以另一种方式工作的宏:在构建开始时,查看是否有任何警告,然后删除 .OBJ 文件。
  • 编写一个 VS 插件,在 .CPP 文件再次编译之前记住警告。
于 2008-12-21T20:56:24.247 回答
1

正如 Hernan 已经说过的,添加一个自定义构建步骤,该步骤会复制包含构建结果(警告)的中间文件。不确定如何为此命名,但您可以创建一个 bat 文件,该文件被称为自定义构建步骤。

为什么要保存警告超出了我的范围。将它们视为错误,或忽略它们或编译指示/禁用它们。

于 2008-12-21T21:07:55.393 回答
0

重建您的项目或仅重新编译 a.cpp 文件。警告由编译器输出,因此您不会收到当前编译中未包含的文件的警告。

您可以将当前构建输出保存到“输出”窗格并按 Ctrl+S(如果我不记得不好,默认为 output-build.txt。)

在您的项目设置中,我认为构建输出消息可以保存在文件中。检查它并告诉你的结果。

干杯

于 2008-12-21T20:14:25.300 回答
0

鉴于您不想重新编译导致警告的文件,您可能有一个选择是编写一个小实用程序,用于过滤编译器的输出以获取警告并将它们作为 //TODO 注释写入 .cpp 文件.

然后 IDE 会将它们放在待办事项列表中。

我不知道有什么开箱即用的方法,但它可能不会太难鞭打。

如果您不希望该实用程序与实际的源文件混在一起(我不确定我是否愿意),您可能希望让它将 //TODO 注释写入一个虚拟的“todo.cpp”文件并拥有它项目中的文件。然后它们会出现在待办事项列表中,由于文件只是注释,它不会影响构建。只需确保该实用程序很聪明,不会将重复项添加到列表中。可以编写一个宏来将您从 todo.cpp 行带到警告的相应实际位置。

于 2008-12-21T21:11:12.877 回答
0

我强烈建议在运行时尽可能多地发出警告,当然在你自己编写的所有代码中也是如此。在这里和现在修复警告要容易得多,而不是等到稍后再尝试一次性完成所有警告。

您希望将警告作为错误运行有几个原因:

  • 大多数警告实际上表明您的代码存在问题。
  • 如果你有很多警告,你不会注意到中间是否出现了新的警告。我经常看到这种情况发生。
  • 如果有您认为是虚假的警告,或者由于某种原因您无法立即修复它,您可以将其关闭。使用 /w 选项或合适的#pragma。请注意,您只能将其切换到特定文件,甚至可以在代码中的特定位置切换。如果您在编译时仍然需要通知,但那里有#pragma 消息。
  • 如果有代码超出您的控制范围,但您只需将其编译到您的程序中,为该特定模块或源文件切换警告,或者甚至在没有 /WX 的情况下运行它。无论如何,您可能都没有修改代码,因此第 2 点可能不太相关。

我真的看不出任何不使用/WX(或-Werror)运行的正当理由。

于 2008-12-21T21:43:49.330 回答