【问题标题】:How to set C++ language standard in C++ Builder如何在 C++ Builder 中设置 C++ 语言标准
【发布时间】:2020-07-20 15:09:26
【问题描述】:

今天我们编写了一段需要 C++14 或 C++17 的代码。我的同事使用C++Builder进行代码编辑,也想尝试用它编译代码片段。

我们找不到设置 C++ 语言标准的设置。我们通过谷歌搜索发现,C++builder 有一个仅支持 C++11 部分的“经典编译器”和一个支持 C++17 的“基于 clang 的编译器”。我们在项目设置中找到了启用/禁用“经典编译器”的复选框,但没有明确选择语言标准的项目设置(在 C++14 和 C++17 之间切换)。有没有类似的东西?在哪里?

我们拥有的版本是 C++Builder 10.2。

我们还尝试为基于 clang 的编译器显式设置额外的编译器选项 -std=c++14,但该选项被拒绝(“未知值 c++14”)。

【问题讨论】:

  • 如果您可以将标志传递给编译器,请尝试将其传递给--version-v。输出将告诉您您的 IDE 正在使用哪个编译器。然后,您可以查找该编译器版本的语言支持是什么。
  • 它有一个 Clang 编译器和通常的 borland 经典编译器,基本上尝试 Clang 编译器(通过在设置中不检查使用经典编译器)如果它不起作用你可能有一些依赖项(包括错误)或一些如果是未解析的外部链接,则缺少 lib 路径(最后,如果上述方法均无效,您可以尝试检查经典编译器)。

标签: c++ c++builder


【解决方案1】:

ISO C++、10.4 Sydney C++Builder 和 Clang 版本信息如下:

http://docwiki.embarcadero.com/RADStudio/Sydney/en/Clang-enhanced_C%2B%2B_Compilers

Compiler    Platform        Clang Version   LLVM Version
BCC32C      32-bit Windows  5.0             5.0
BCC32X      32-bit Windows  5.0             5.0
BCC64       64-bit Windows  5.0             5.0
BCCIOSARM   32-bit iOS      3.3             3.3
BCCIOSARM64 64-bit iOS      3.3             3.5
BCCAARM     Android         3.3             3.3

https://clang.llvm.org/cxx_status.html

Clang 3.3 及更高版本实现了所有 ISO C++ 2011 标准。

Clang 3.4 及更高版本实现了所有 ISO C++ 2014 标准。

Clang 5 及更高版本实现了 ISO C++ 2017 标准的所有功能。

C++Builder 产品经理 David Millington 还在 C++ 参考站点上更新了 Embarcadero C++Builder 信息: https://en.cppreference.com/w/cpp/compiler_support

您可以查看不同的 ISO C++ 语言版本,了解许多编译器在其编译器版本中支持的内容。

【讨论】:

    【解决方案2】:

    Hans Passant 对我的问题发表了评论,链接到 New in RAD Studio 10.3: C++17, asynchronous C++ code completion, and more,谢谢。

    从这个链接我了解到:

    1. C++ Builder 10.2 不包括对 C++14 和 C++17 的任何支持。
    2. C++ Builder 10.3 仅在编译 32 位 Windows 二进制文件时支持 C++17。对 C++14 的支持仅在 C++17 是 C++14 的“有一些小例外,是一个超集”的意义上才可用。这意味着,您无法选择用于编译的所需语言标准。
    3. C++ Builder 10.4 似乎也支持 64 位窗口的 C++17。目前尚不清楚是否以及如何选择要使用的语言标准。

    【讨论】:

    • "10.3 仅在编译 32 位 windows 二进制文件时支持 C++17" - 再次仔细阅读。您链接到的博客文章以及the DocWiki 也都说在 Win32 和 Win64 中使用了相同的 Clang 5.0 版。 Win64 中还没有 C++17 语言特性,但 C++17 库特性 是(std::string_view 等)。
    • "您无法选择用于编译的所需语言标准" - 实际上,您可以根据10.3 "What's New" 发行说明:“Win32 编译器默认为 C++ 17 适用于所有项目。但是,在“项目选项”>“C++ 编译器”页面中,您可以选择使用较早的语言标准,包括 C++14、C++11 甚至 C++98 /03。”
    • @RemyLebeau 感谢有关标准选择的更正,并在其中进行了编辑。我注意到 C++17 语言与库功能之间的区别,但忽略了这一点,因为总而言之,这意味着 C++17 是不支持。
    • 10.4 Sydney 支持 Win32 和 Win64 的 Clang v5.0 - 因此两者都支持 C++14 和 C++17。引用 DocWiki:Win32 和 Win64(bcc32c/bcc32x 和 bcc64)的 Clang 增强编译器实现了所有 ISO C++17 标准。 docwiki.embarcadero.com/RADStudio/Sydney/en/…
    • @RemyLebeau 今天我有机会尝试在 C++ Builder 10.3 的实例中找到 C++ 语言标准设置。对于 32 位 Windows 项目,我在 Project Options > C++ Compiler 下找不到任何 C++14/17/11/03 设置。因此回滚了我之前的更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2022-10-16
    • 2012-03-25
    • 2021-04-02
    • 2014-12-08
    • 1970-01-01
    • 2011-06-21
    相关资源
    最近更新 更多