如何禁止在C++项目中使用某些特定的函数,类和头文件

How to ban the usage of some specific functions, classes and header files in C++ project

提问人:Danya Smelskiy 提问时间:2/7/2023 更新时间:2/7/2023 访问量:147

问:

我正在尝试找到一种方法,如何禁止在我的 C++ 项目中使用某些函数、类和头文件。

更准确地说,在我的工作项目中,我们尽量避免使用 C++ iostream 库,因为它极大地增加了我们服务的二进制大小。相反,我们尝试使用 stdio 库。

我想添加一个自动验证,即我们没有使用某些头文件 (iostream...)、类 (std::istream、std::ostream...) 和函数 (std::getline...) 到我们的 CI/CD 管道。

此外,必须有一种方法可以忽略某些目录(例如,对于 3D 方库、测试和模拟)的此验证,或者如果可能的话,忽略一些单独的行。

C++ 持续集成 嵌入式 IOSTREAM

评论

7赞 Pepijn Kramer 2/7/2023
只需有一个脚本,在签入时解析文件是否包含“禁止”包含,并在文件中找到包含之一时拒绝签入(合并请求或类似内容)。我不会让它变得太困难(例如,每个组件都有一个禁止文件列表)
0赞 tadman 2/7/2023
与其禁止包含,为什么不在 CI 环境中分析可执行文件/库大小并寻找大小的任何突然跳跃?这不仅仅是一个可以做到这一点的人。#include
2赞 joergbrech 2/7/2023
@PepijnKramer和@user17732522我认为这两个极端都是可以接受的,这取决于你愿意付出多少努力。为(例如)预提交钩子或 CI-job 中的禁止关键字编写一个脚本应该相当简单。或者,您可以使用像 libclang 这样的工具来系统地检查传递包含或函数调用。无论哪种方式,都要确保规则透明且简单。维护软件是一件痛苦的事情,这没什么好玩的。grep
0赞 joergbrech 2/7/2023
如果你真的承诺,你甚至可以编写你自己的clang tidy checker,可以自动修复(一些)你有问题的代码片段,但这绝对不是简单的任务。
0赞 user17732522 2/7/2023
@joergbrech 是的,当然,libclang 会起作用。这是一个更好的建议。

答: 暂无答案