C++ 如何在UML活动图中表示编译时条件?

C++ 如何在UML活动图中表示编译时条件?,c++,c,uml,precompile,rhapsody,C++,C,Uml,Precompile,Rhapsody,我正在使用一个遗留的C代码,我需要用UML来记录它。目前还没有使用这些UML图进行合成的迫切需求,但在未来,人们希望朝着这个方向发展 现在,代码中充满了可以在编译时启用或禁用的功能: #if(FEATURE_X == ON) deal_with_x(); #endif 由于在UML中无法区分编译时和运行时条件(是否存在?),因此我最终对两者使用相同的决策块,这意味着我的图表实际上表示以下代码: if(FEATURE_X == ON) { deal_with_x(); } 虽然

我正在使用一个遗留的C代码,我需要用UML来记录它。目前还没有使用这些UML图进行合成的迫切需求,但在未来,人们希望朝着这个方向发展

现在,代码中充满了可以在编译时启用或禁用的功能:

#if(FEATURE_X == ON)
    deal_with_x();
#endif
由于在UML中无法区分编译时和运行时条件(是否存在?),因此我最终对两者使用相同的决策块,这意味着我的图表实际上表示以下代码:

if(FEATURE_X == ON) {
    deal_with_x();
}
虽然我希望编译器在禁用功能X时消除调用,但这段代码并不完全相同,至少有两个原因:

  • 即使禁用了功能x,也必须定义处理x()
  • 静态代码分析会抱怨死代码
处理这种情况的正确方法是什么?是否有一个UML特性我不知道,可以帮助?或者,我应该为不同的配置创建单独的活动图(相当多的工作)?或者我应该依靠编译器来消除不必要的调用,避免完全使用预编译器指令吗


虽然我的问题是关于C代码和预编译指令,但我也可以看到C++模板中出现的问题,尤其是如果语言中引入了。

只需标记值来描述。 这与任何活动图无关。这是一个纯粹的静态部署。因此,您可以创建使用不同标记值进行不同编译的组件

编译时条件告诉您如何生成代码。因此,这将转到模型的某个部署部分。活动图表示系统的行为。如果您有一个以这种或那种方式编译的目标组件,并且您在活动图中显示了它的不同用法,那么您可以通过各种方式发出信号。一种是命名约定,在模型或随附文档中的其他地方进行了描述。另一种方法是创建需求,该需求声明创建一个公共源,并将这些需求链接到活动和后续组件


(个人)需要注意的是:编译时选项的使用(特别是过度使用)会使代码很难阅读,甚至无法阅读。事实上,每次使用编译时选项都会使同一个源代码变得完全不同。因此,与其从“我希望此函数具有相同的源代码,因此倾向于使用编译器标志”开始,不如从另一个方面开始。专注于函数和部署,然后最终考虑使用编译器标志的“优化”。因此,实际上,完全不考虑活动图。我检查了有条件定义的函数,它们有一个通过自定义原型定义的
预编译配置的
标记。你的意思是我可以在活动图块上以类似的方式使用标记吗?请参阅答案中的其他段落。