【发布时间】:2011-11-13 06:13:55
【问题描述】:
我正在开发一个专有的类 unix 操作系统(我不知道这是否相关)并使用 g++ 进行编译。
我最近注意到,如果我在我的 C++ cmets 中放置类似 xml 的标签,我会得到编译器错误。我并不特别需要这样做,但我认为这很奇怪,我想知道为什么这对编译器来说是个问题。例如:
// <debugoutput>
std::cerr << "I'm debugging!" << std::endl;
// </debugoutput>
如果它位于我的代码中间某处,将导致大量编译器错误。将最后的注释行 </debugoutput> 更改为 <debugoutput> 使其编译正常。
有谁知道为什么编译器会被注释中的那一行弄糊涂?发生这种情况时生成的编译器错误似乎根本不相关——它们更像是你错过了类末尾的分号、对明确定义的类的未定义引用等所看到的。我可以'不要粘贴我的开发系统的输出,但请相信我,它看起来与问题无关——它更像是编译器被混淆了。
【问题讨论】:
-
您能否发布一个说明错误的最小示例,并告诉我们编译器会打印什么错误?如果是多个错误,则不必将它们全部包含在内。只需第一条错误消息就足够了。
-
需要查看更多代码。一个简单的例子(如上)适用于 gcc 4.6.0。
-
我似乎无法在任何简单的程序中复制它——发生这种情况的项目是一个非常大的项目,它是用多线程 make 构建的(以前从来没有问题,但认为这可能很重要)。我知道这没什么好说的,但我希望以前有人可能遇到过类似的事情。
-
即使你不能在一个简单的程序中复制它,实际的错误信息仍然会有所帮助。
-
这是一个封闭的系统,编译器转储都是程序特定的(类名、未定义的引用等),即使我可以提供它,所以除非你能看到程序不幸的是绝对不可能。无论如何,我会用 digraph 解决方案来结束它 - 这似乎是唯一一个有任何输入的解决方案。