[英]How to provoke a compile-time error if a specific overload of a function is called?
[英]how to add compile-time metadata/behavior to specific function
我的代码库是带有自定义C ++ RTOS的NXP ARM M4上的C ++。
有一个特定的函数DWB()
DangerWillRobinson()
,如果调用该函数可能会产生意想不到的副作用(正确使用时才有效)。
DWB()
可以像A()->B()->C()->D()->...->DWB()
那样以非常深层的嵌套方式调用
我希望任何直接或间接调用DWB()
函数的作者都知道DWB()
已被调用, 并且我想强迫他们承认他们知道DWB()
已被调用。
我知道这可以通过使用Python解析链接器生成的调用树来实现,但是我非常希望这是编译时错误。
这就是我想要的工作方式:
void A()
{
B();
}
作者去编译:
错误:DWB()被调用。 请确认。
然后,作者考虑了调用DWB()
的副作用,没有发现任何问题。
void A()
{
// some macro-thing ... ?
B();
}
如果可能,我不希望这是运行时检查。 我认为从理论上讲,这是可能的。 如果Base
是继承的,我希望考虑所有可能的类的调用树。 如果它们都没有实例化但并不理想,那是可以的。
题
这种编译时元数据/函数行为可能吗?
这种编译时元数据/函数行为可能吗?
不,不是。 可能会有一些可配置的SCA工具可用(考虑到商业上的高级工具),但是没有普通的c预处理或meta-template-programming魔术。
我希望任何直接或间接调用
DWB()
函数的作者都知道DWB()
已被调用,并且我想强迫他们承认他们知道DWB()
已被调用。
这样做的最不麻烦的方法是标记DWB()
函数[[deprecated]]
。
我只是假设您希望在中期路线图中排除这种容易出错的功能,并用更稳定的功能代替它。
如果您确定正确的DWB()
调用的所有条件是什么,最快捷的方法是在该函数的开头应用一堆assert()
调用。
可能会有来自其他开发人员的投诉,他们试图错误地使用该功能。 尽可能在断言消息中给他们最好的建议。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.