【问题标题】:Gumbo parser in C++ Builder XE6C++ Builder XE6 中的 Gumbo 解析器
【发布时间】:2015-03-06 13:14:41
【问题描述】:

我正在我的 C++ Builder XE6 项目中尝试使用 HTML 解析器 - Gumbo(用 C 编写)。

当我编译时,我收到很多错误(E2140 Declaration is not allowed here 等),这些错误似乎来自文件char_ref.rl

我已经尝试了很多来避免这些错误,但我没有成功。

有没有人在 C++ Builder 项目中使用过 Gumbo,或者至少在 C++ 项目中使用过?

谢谢

【问题讨论】:

  • 经过一些测试,我认为问题在于 C++ builder 在使用 extern "C" 时不支持 C99,因为我可以通过移动声明来撤销错误......我不知道为什么,我不知道如何处理这个问题(我在项目选项中搜索过,但找不到相关的东西)
  • 当您没有显示您的代码或失败的库代码时,您希望这里的任何人如何诊断此问题。你认为人们会跑掉并尝试自己安装 Gumbo 只是为了看看你所看到的吗?请务必在您的问题中提供所有相关详细信息。
  • 实际上,整个代码都失败了,因为正如我所说,我发现 C++ builder 不允许混合声明和声明。我不能在这里展示 Gumbo 库的全部代码。这就是为什么我要找一个已经在 C++ 项目中使用过 Gombu 的人。不过,感谢您的宝贵时间。

标签: c++ c++builder gumbo


【解决方案1】:

注意:extern "C" 并不意味着“将此代码编译为 C”。这意味着应该编译块内的 C++ 代码,以便以与 C ABI 兼容的方式发布任何外部名称等。而且这样的块不应该包含任何函数定义。您可能在代码中错误地使用了extern "C",但如果没有看到您的代码就很难说。

无论如何,bcc32.exe 的 C 编译器部分似乎不允许混合语句和声明,即使您提供标志 -An 这应该意味着“使用 C99 关键字和扩展”。

您将不得不进行 64 位构建或对该 C 源代码进行大量更改,以便与恐龙 bcc32 兼容。或者您可以使用现代编译器将 Gumbo 构建为 DLL(如果它支持该选项,IDK)。

【讨论】:

  • 感谢您的回答。我不明白的是,在我不使用 extern "C" 的部分代码中,混合语句和声明是完全可以的。此外,这不在我的代码中,而是在 Gumbo 代码中,所以我确定它使用正确。我绝对不能更改 Gumbo 库的整个代码。我想我会首先尝试使用 DLL。祝你有美好的一天。
  • @mvezinet 项目中的一些文件是 .c ,一些是 .cpp ; .c 中的代码(或包含在 .c 中)不能混合声明和语句;其他代码可以。 Gumbo 代码可能假定符合 C99 或至少 GCC 扩展。
猜你喜欢
  • 1970-01-01
  • 2014-08-04
  • 2014-07-08
  • 1970-01-01
  • 2021-06-21
  • 2012-10-21
  • 1970-01-01
  • 2011-11-19
  • 2013-12-15
相关资源
最近更新 更多