gcc - 从 GCC 切换到 Clang 的常见问题是什么?

标签 gcc g++ clang clang++ compiler-flags

假设我的 C++ 符合标准并且我不依赖第三方库,那么在 makefile 中将“g++”替换为“clang++”时遇到的常见陷阱是什么?像不兼容的编译器选项、选项顺序的不同要求、其他一些限制等。

最佳答案

TL;博士: Clang 与 GCC 高度兼容 - 试一试吧。

在大多数情况下,Clang 可以用作 GCC 的替代品(clangclang++ 是“GCC 兼容驱动程序”)。 Clang 的设计考虑了 GCC 兼容性,并且 GCC 中可用的大多数选项也应该受 Clang 支持。

根据我的经验,在几个项目中交替使用 GCC 和 Clang,我不记得有任何 Clang 未能编译 GCC 成功的情况。

但是,根据项目的规模和复杂性,迁移可能不会完全顺利。有几个因素可能会产生影响,包括编译器错误和不同的代码生成,它们可能会影响应用程序性能,在极少数情况下甚至会影响应用程序功能。切换编译器是一个很大的变化,因此一旦您能够成功构建,最好运行所有可用的测试和基准测试。

以下是 SO 中针对 GCC 和 Clang 可能不兼容的几个示例。很有可能,您不会遇到此类问题。

  • Clang vs GCC vs MSVC template conversion operator - which compiler is right?
  • GCC accepts `constexpr struct {} s;` but Clang rejects it. Who is correct?
  • Why do gcc and clang each produce different output for this program? (conversion operator vs constructor)
  • Inheriting default constructor fails in gcc and works in clang, which one's got the bug?
  • Overload resolution behaviour difference between GCC and clang (SFINAE)

  • RE:选项顺序 - GCC 和 Clang 都接受任何顺序的编译器标志。

    关于gcc - 从 GCC 切换到 Clang 的常见问题是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51866968/

    相关文章:

    c++ - 如何在一个部分的末尾放置一个变量(使用 GCC)

    linux - CentOS 6.7 上的 "gcc: error trying to exec ' cc1plus ': execvp: No such file or directory"

    c++ - -mmacosx-version-min 影响位域的打包行为?

    c++ - 为什么尽管使用了 -isystem,但 clang 在我的标题上报告了警告,而 gcc 没有报告?

    c++ - 签名 :ness optimization "bug" in gcc

    c++ - 在自己的声明中使用类作为模板参数

    iphone - 编译时 iPhone sdk 项目中出现奇怪的重复符号?

    c++ - 如何检查模板类中的变量是否为字符串类型?

    clang - 如何使用 clang-format 3.9 忽略文件或目录

    交叉编译Raspberry pi 2错误