【问题标题】:Strange compiler error due to use of xml in c++ comments由于在 C++ 注释中使用 xml 而导致的奇怪编译器错误
【发布时间】:2011-11-13 06:13:55
【问题描述】:

我正在开发一个专有的类 unix 操作系统(我不知道这是否相关)并使用 g++ 进行编译。

我最近注意到,如果我在我的 C++ cmets 中放置类似 xml 的标签,我会得到编译器错误。我并不特别需要这样做,但我认为这很奇怪,我想知道为什么这对编译器来说是个问题。例如:

// <debugoutput>
std::cerr << "I'm debugging!" << std::endl;
// </debugoutput>

如果它位于我的代码中间某处,将导致大量编译器错误。将最后的注释行 &lt;/debugoutput&gt; 更改为 &lt;debugoutput&gt; 使其编译正常。

有谁知道为什么编译器会被注释中的那一行弄糊涂?发生这种情况时生成的编译器错误似乎根本不相关——它们更像是你错过了类末尾的分号、对明确定义的类的未定义引用等所看到的。我可以'不要粘贴我的开发系统的输出,但请相信我,它看起来与问题无关——它更像是编译器被混淆了。

【问题讨论】:

  • 您能否发布一个说明错误的最小示例,并告诉我们编译器会打印什么错误?如果是多个错误,则不必将它们全部包含在内。只需第一条错误消息就足够了。
  • 需要查看更多代码。一个简单的例子(如上)适用于 gcc 4.6.0。
  • 我似乎无法在任何简单的程序中复制它——发生这种情况的项目是一个非常大的项目,它是用多线程 make 构建的(以前从来没有问题,但认为这可能很重要)。我知道这没什么好说的,但我希望以前有人可能遇到过类似的事情。
  • 即使你不能在一个简单的程序中复制它,实际的错误信息仍然会有所帮助。
  • 这是一个封闭的系统,编译器转储都是程序特定的(类名、未定义的引用等),即使我可以提供它,所以除非你能看到程序不幸的是绝对不可能。无论如何,我会用 digraph 解决方案来结束它 - 这似乎是唯一一个有任何输入的解决方案。

标签: c++ compiler-construction


【解决方案1】:

这听起来有点像有向图相关的问题,但如果没有实际的错误消息或显示问题的小代码示例,就很难确定。

尝试更改 &lt;/ 和实际文本之间的空格,并在 C 风格的注释中尝试这样做,看看是否能提供更多见解。

有关 C/C++ 二合字母和三合字母的信息,请参阅来自 SO 的 http://en.wikipedia.org/wiki/C_trigraph#C 以及 Purpose of Trigraph sequences in C++?Why are there digraphs in C and C++?

似乎有一些序列被拾取(例如&lt;/ 作为一个有向图,它正在摆脱编译器)。

【讨论】:

  • 由于某种原因,更改评论样式和间距似乎确实可以缓解问题。至于编译器输出和代码——它们在一个封闭的系统上,输出甚至与更改的文件无关——更多的是关于找不到类定义等。如果我可以发布我会的,但是发生这种情况时会出现数千行编译器错误,哈哈。 “图表”问题是什么意思?如果你让我知道,我会关闭它:)
  • 二合字母无关紧要,因为无论您交流过什么二合字母,它仍然被注释掉。并且你不能用任何字符结束 // 评论,除了换行符,它不是二合字母或三合字母。
  • @DeadMG 无论如何都不是一个正确符合编译器的二合字母实现,但如果它是一个更模糊的系统,或者我们没有看到其他一些步骤......
猜你喜欢
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多