繁体   English   中英

如何向特定功能添加编译时元数据/行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM