为啥某些 LLVM 标准库标头包含其他标头但 GCC 不 [重复]
Posted
技术标签:
【中文标题】为啥某些 LLVM 标准库标头包含其他标头但 GCC 不 [重复]【英文标题】:Why do some LLVM standard library headers include other headers but GCC does not [duplicate]为什么某些 LLVM 标准库标头包含其他标头但 GCC 不 [重复] 【发布时间】:2021-02-06 08:13:49 【问题描述】:在跨 GCC 和 Clang 编译项目时,我注意到像 fabs
这样的函数会导致 GCC 上的编译问题,因为我自己从未包含过 <cmath>
。我是在 Clang 上开发的,所以我从来没有注意到这一点,因为我使用的是 llvm <cstdlib>
头文件 includes <cmath>
itself,似乎没有用它做任何事情,而 GCC 版本则没有。
这有什么原因吗?除了尝试之外,我还能做些什么来确保我的代码能够跨多个标准库编译?
【问题讨论】:
如果我没记错的话,该标准允许 C++ 实现在另一个标准头中包含任何标准头。这有时可以使您的代码编译,即使它没有包含所有需要的标头。人们希望实现更加迂腐,以便它们可以帮助发现此类错误并确保更多的可移植性,但现实情况有所不同。 【参考方案1】:对于您使用的每个函数,请查阅 C++ 参考以找出您应该包含哪个标头。
The reference for fabs
表示您必须包含<cmath>
。
【讨论】:
好的,谢谢。我知道这样做,但是检查一个大文件中的每个函数并与文档交叉引用它并不有趣。幸运的是,我被一位朋友链接到 github.com/include-what-you-use/include-what-you-use 以自动执行此操作以上是关于为啥某些 LLVM 标准库标头包含其他标头但 GCC 不 [重复]的主要内容,如果未能解决你的问题,请参考以下文章