【问题标题】:Is there a C++11 to C++03 converter? [closed]有 C++11 到 C++03 的转换器吗? [关闭]
【发布时间】:2013-01-23 14:23:26
【问题描述】:

是否有这样的工具能够将使用某些 C++11 功能的代码转换为与 C++03 兼容的代码(可能使用一些第三方库,例如 Boost)?

【问题讨论】:

  • 不,没有这样的工具,我听说过
  • 就像更新工具链一样(相对)容易,似乎任何人都不值得努力创建转换器。我真的怀疑有一个或永远会有一个生产质量的。不过会很有趣。
  • 如果你真的非常想要这个,你无疑可以为 Clang 创建一个可以发出 C++03 代码的后端。它生成的代码可能只适合编译器使用。让它可读可能会很困难。
  • @szx,运行程序与编译程序不同。在任何情况下,您都可以轻松地在旧系统上安装更新的编译器,然后您可以在那里编译 C++11 代码。
  • 不是一个真正的问题?这只是一个是/否的问题,这里有什么不真实的?

标签: c++ c++11 converter c++03


【解决方案1】:

因为没有人给出实际答案,所以答案是“否”。只需升级您的工具链。无论如何,这样做有很多充分的理由。

对于 Ubuntu 和其他 Linux 变体,如果您想在非常旧的系统上使用新工具链,您甚至可以以源代码形式下载软件包并为您的旧系统编译它。当然,如果您随后使用它发布程序,则必须静态链接 libstdc++ 或将共享库与您的程序一起发布。

任何人都不太可能编写转换器,因为升级工具链非常容易。这将是一个有趣(而且相当复杂)的爱好项目。也许有一天有人会写一个 C++11 编译器而不是编译成 C99。 :-) 那可能会容易得多。

【讨论】:

  • C++11-to-portable-C99 编译器几乎是不可能的。 C++11-to-system-specific-C99 编译器可能没有任何用处。但是 C++11-subset-to-portable-C99 编译器在少数情况下可能很有用,而且无论如何都非常有趣。
  • 静态链接 libstdc++ 并不总是有帮助,我曾经这样做过,在旧系统上运行时在运行时找不到一些奇怪的符号
  • @szx 如果动态链接新的 glibc / libgcc,则通常不能在旧 glibc / libgcc 的系统上使用生成的二进制文件。您需要使用旧 glibc 在旧系统上安装 gcc,并在那里执行构建。但这不是因为静态链接的 libstdc++。
  • @hvd:为什么几乎不可能? cfront 是为旧版 C++ 做的。
  • @Omnifarious 最简单的是,C++ 程序在一个系统上可能格式错误(需要诊断),但在另一个系统上却完全有效,这取决于不能用 C 语言表达的复杂情况:在编译时被检测到。据我所知,cfront 从未发布过便携式 C;它的输出只需要对于将要编译的一个系统是正确的。
猜你喜欢
  • 1970-01-01
  • 2011-12-10
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 2010-09-14
  • 1970-01-01
相关资源
最近更新 更多