c++ - 如何将编译时元数据/行为添加到特定函数

标签 c++ embedded

我的代码库是 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 that DWB() is called and I want to force them to acknowledge that they know DWB() is called.

做到这一点的最少干扰的方法是标记 DWB() 函数 [[deprecated]] .

我只是假设您更愿意在中期路线图中排除这种容易出错的功能,并用更稳定的东西取而代之。

如果您确定正确的 DWB() 调用的所有条件是什么,最快捷的方法是在该函数的开始。

可能会收到其他开发人员的投诉,他们试图错误地使用该功能。在断言消息中尽可能给他们最好的建议。

关于c++ - 如何将编译时元数据/行为添加到特定函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56409710/

相关文章:

c - 函数将 "wrong"值写入寄存器 - PIC18F

c++ - 请解释以下C++语法

c++ - 将 double[,] 转换为 Variant*

c - 是否可以使用STM32生成CAN总线错误?

c - C 嵌入式应用程序中 time() 函数的问题

c++ - int8_t 和 char : converts between pointers to integer types with different sign - but it doesn't

c++ - 反转模板(整数)参数的顺序

c++ - ucrtd.lib 和 msvcrtd.lib 中都定义了 __crt_debugger_hook?

C++ 树类 : constructor/copy/memory leak?

linux - 列出具有DD-WRT v24sp1固件的WRT54GL上的可用闪存空间吗?