c++ - VS C++ 2008 : Modifying Output text?

标签 c++ visual-studio visual-studio-2008 debugging

我使用的是 Visual Studio C++ 2008 Express Edition。

是否可以针对编译(或其他)错误修改“输出” Pane 中的文本?

例如,我可能会收到一条错误消息:错误 C2556:int Class::getResult(void) + 更多相关垃圾。

我可以解析输出文本并轻松找到并修复我的错误。如果我可以修改错误以使它们更清晰、更短、更友好,那将仍然很好/有用。一个例子是收到一个错误,内容如下:“Source.cc(第 10 行):缺少结尾;”

最佳答案

有几件事你必须明白。编译器确实在尽其所能;它会准确告诉您失败的位置,以及到那时为止的整个编译过程。它不知道你打算写什么,它知道你写了什么,所以它怎么可能假设错误是由其他更遥远的东西引起的呢?我认为,如果您在编写它时到了让错误“更简洁、更简短、更友好”的地步,您就会意识到这比看起来要困难得多。

在某些情况下它可以做到这一点,而且编译器似乎越来越擅长建议它们。例如这个:

if (x);
{
    x = 5;
}

产生警告:

warning C4390: ';' : empty controlled statement found; is this the intent?

但他们不能总是那样做。

总而言之,一旦您稍微学习了这门语言并理解了它的全部含义,错误消息就是您解决问题所需要的全部内容。我认为模板错误是“邪恶和神秘的”是一个巨大的神话和夸张。虽然它们可能很冗长,但它们实际上一点也不难理解。我不认为模板错误是神秘的,我认为是读者不知道如何读好它,这让它看起来很神秘。但是,如果您花点时间,就会确切地看到它试图做什么以及失败的地方。

在下一个标准 C++0x 中会出现一个叫做“概念”的东西,它将极大地解决这个问题。它们有点像标签,如果它们支持标签所要求的一切,类就可以适应这些标签。因此,在 std::copy 中,您不会收到有关无法调用 operator= 的错误以及传播的错误,您只会得到类似“错误:类型不是 CopyAssignable”,就是这样。同样的错误,不同的表现形式。这也是他们暂时被淘汰的原因。事实证明它们很麻烦,而且由于它无论如何都是语法糖,所以更重要的是要处理其他事情。希望有一天我们能见到他们。

现在,有一个工具叫做 STLFilt ,它将过滤与 STL 中的事物有关的模板错误。我从来没有用过它,但我不止一次听到有人推荐它。这是他们的一个 sample filters .您可以尝试一下。


因为您似乎认为这是可以用语言本身做的事情:不。该语言没有关于错误消息应该是什么样子或者什么应该警告或什么不应该警告的概念。

您会在第 1.4/2 节的标准中找到我的意思。总结起来,它基本上是说“如果有错误,输出一些关于它的信息”。就是这样。

关于c++ - VS C++ 2008 : Modifying Output text?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2302815/

相关文章:

vb.net - 如何将这个函数放在一个单独的线程中

c++ - 如何存储 system() 调用的输出?

c++ - 如何使用 Qt SDK 为 Gentoo 64 位(Linux 内核 2.6)构建 native 应用程序?

java - 从 basic_string 到 jstring 的转换

vb.net - 从 url 保存图像

.net - Visual Studio 2008 和 Oracle 10g

visual-studio-2008 - Visual Studio 2008 中的 LNK1210

c++ - 如何在 C++ 中模拟接口(interface)?

c++ - 如何在 c++ (visual studio) 中使用 julia 语言

visual-studio - 如何在输出窗口中调试 System.ArgumentException?