当C++开发人员不小心包含std库的内部实现头时,有没有一种方法可以警告他们?

oknrviil  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(115)

如何让开发人员自动知道这个“bits/shared_ptr.h”是标准库(gcc和clang)的内部。

#include <bits/shared_ptr.h>

// some code using std::shared_ptr

最好也通知<memory>应该使用。

这个<bits/shared_ptr.h>只是一个例子-我的意思是-如何警告任何包含的实现头。

我所说的“自动”是指编译器警告或像clang-tidy这样的静态分析。
我有tried“-Wall -Wextra -pedantic”和所有clang-tidy检查,没有llvm* 检查-这些llvm* 警告几乎每个头,它只是为llvm开发人员,而不是为我们,普通开发人员。
有什么建议吗
我更喜欢现有的解决方案,我知道我可以为此编写脚本。
好的,我找到一张我可以用的支票。
portability-restrict-system-includes
只需要在配置中指定不允许“位”的东西:
-config="CheckOptions: {portability-restrict-system-includes.Includes: '*,-bits/*,bitset'}"
参见demo
但是,好吧,这不是完美的解决方案-需要维护“不允许”标题的列表。

hgncfbus

hgncfbus1#

include-what-you-use似乎做了你想做的事情。
它有一个Map,什么名字应该来自什么头,它似乎知道哪些头是内部的。
例如,当包含<bits/shared_ptr.h>https://godbolt.org/z/cvq7354K6时:

#include <bits/shared_ptr.h>

std::shared_ptr<int> x;

删除<bits/shared_ptr.h>并添加<memory>

相关问题