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



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

TL;DR:Clang与GCC高度兼容 - 试一试。

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

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

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

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

  • Clang vs GCC vs MSVC 模板转换运算符 - 哪个编译器是正确的?
  • GCC 接受 'constexpr struct {} s;' 但 Clang 拒绝了它。谁是正确的?
  • 为什么 gcc 和 clang 各自为这个程序产生不同的输出?(转换运算符与构造函数(
  • 继承默认构造函数在 gcc 中失败并在 clang 中工作,哪个有错误?
  • GCC 和 clang 之间的过载分辨率行为差异 (SFINAE(

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

最新更新