我正在使用需要在 UML 中记录的遗留 C 代码。没有立即要求使用这些 UML 图进行综合,但希望在未来朝着这个方向发展。
现在,代码充满了可以在编译时启用或禁用的功能:
#if(FEATURE_X == ON)
deal_with_x();
#endif
由于在 UML 中无法区分编译时条件和运行时条件(存在吗?),我最终对两者使用相同的决策块,这意味着我的图表实际上代表了以下代码:
if(FEATURE_X == ON) {
deal_with_x();
}
虽然我希望编译器在禁用功能 X 时消除调用,但至少有两个原因,这不是完全相同的代码:
deal_with_x()
即使功能 X 被禁用,也必须定义- 静态代码分析会抱怨死代码
处理这种情况的正确方法是什么?是否有我不知道的 UML 功能可以提供帮助?或者我应该为不同的配置创建单独的活动图(相当的工作)?还是我应该依靠编译器来消除不必要的调用并完全避免使用预编译器指令?
虽然我的问题是关于 C 代码和预编译器指令的,但我可以看到 C++ 模板也会出现同样的问题,特别是如果在语言中引入了静态。if