从 GCC 切换到 Clang 的常见问题是什么?
What are the common problems in switching from GCC to Clang?
假设我的 C++ 是符合标准的并且我不依赖第三方库,那么在 makefile 中将“g++”替换为“clang++”时通常会遇到哪些陷阱?如不兼容的编译器选项、选项顺序的不同要求、一些其他限制等。
TL;DR: Clang 与 GCC 高度兼容 - 试一试吧。
在大多数情况下,Clang 可以用作 GCC 的替代品(clang
和 clang++
是 "GCC compatible drivers")。 Clang 在设计时考虑了 GCC 兼容性,GCC 中可用的大多数选项也应该由 Clang 支持。
根据我在多个项目中交替使用 GCC 和 Clang 的经验,我不记得有任何情况是 Clang 编译失败而 GCC 编译成功。
但是,根据项目的大小和复杂程度,迁移可能不会完全顺利。有几个可能会产生影响的因素,包括编译器错误和不同的代码生成,它们可能会影响应用程序性能,在极少数情况下甚至会影响应用程序功能。切换编译器是一个很大的变化,所以一旦您能够成功构建,最好 运行 所有可用的测试和基准测试。
这里只是一些来自 SO 的 GCC 和 Clang 可能不兼容的例子。很有可能,您不会遇到此类问题。
- Clang vs GCC vs MSVC template conversion operator - which compiler is right?
- Overload resolution behaviour difference between GCC and clang (SFINAE)
RE: 选项顺序 - GCC 和 Clang 都接受任何顺序的编译器标志。
假设我的 C++ 是符合标准的并且我不依赖第三方库,那么在 makefile 中将“g++”替换为“clang++”时通常会遇到哪些陷阱?如不兼容的编译器选项、选项顺序的不同要求、一些其他限制等。
TL;DR: Clang 与 GCC 高度兼容 - 试一试吧。
在大多数情况下,Clang 可以用作 GCC 的替代品(clang
和 clang++
是 "GCC compatible drivers")。 Clang 在设计时考虑了 GCC 兼容性,GCC 中可用的大多数选项也应该由 Clang 支持。
根据我在多个项目中交替使用 GCC 和 Clang 的经验,我不记得有任何情况是 Clang 编译失败而 GCC 编译成功。
但是,根据项目的大小和复杂程度,迁移可能不会完全顺利。有几个可能会产生影响的因素,包括编译器错误和不同的代码生成,它们可能会影响应用程序性能,在极少数情况下甚至会影响应用程序功能。切换编译器是一个很大的变化,所以一旦您能够成功构建,最好 运行 所有可用的测试和基准测试。
这里只是一些来自 SO 的 GCC 和 Clang 可能不兼容的例子。很有可能,您不会遇到此类问题。
- Clang vs GCC vs MSVC template conversion operator - which compiler is right?
- Overload resolution behaviour difference between GCC and clang (SFINAE)
RE: 选项顺序 - GCC 和 Clang 都接受任何顺序的编译器标志。