我的代码库是 NXP ARM M4 上的 C++,带有自定义 C++ RTOS。
存在一个特定的函数,DWB()
又名 DangerWillRobinson()
,如果调用它可能有意想不到的副作用(这是正确使用时有效)。
DWB()
可以以非常深的嵌套方式调用,如
A()->B()->C()->D()->...->DWB()
我希望任何直接或间接调用 DWB()
的函数的作者都知道 DWB()
被称为 and我想强制他们承认他们知道调用了 DWB()
。
我知道这可以通过使用 Python 解析链接器生成的调用树来完成,但我更希望这是一个编译时错误。
这是我希望它的工作方式:
void A()
{
B();
}
作者去编译:
ERROR: DWB() is called. Please acknowledge.
然后作者考虑了调用 DWB()
的副作用,没有发现任何问题。
void A()
{
// some macro-thing ... ?
B();
}
如果可能,我不希望这是运行时检查。我认为在理论上,这是可能的。如果 Base
是继承的,我希望考虑所有可能的类的调用树;如果它们都没有实例化但不理想也没关系。
问题
函数的这种编译时元数据/行为是否可能?
最佳答案
Is this compile-time metadata/behavior of a function possible?
不,不是。可能有一些可配置的 SCA 工具可用(考虑商业高级工具),但没有普通的 c 预处理或元模板编程魔法。
I want author of any functions that, directly or indirectly, call
DWB()
to be aware thatDWB()
is called and I want to force them to acknowledge that they knowDWB()
is called.
做到这一点的最少干扰的方法是标记 DWB()
函数 [[deprecated]]
.
我只是假设您更愿意在中期路线图中排除这种容易出错的功能,并用更稳定的东西取而代之。
如果您确定正确的 DWB()
调用的所有条件是什么,最快捷的方法是在该函数的开始。
可能会收到其他开发人员的投诉,他们试图错误地使用该功能。在断言消息中尽可能给他们最好的建议。
关于c++ - 如何将编译时元数据/行为添加到特定函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56409710/