我正在使用一個遺留的C代碼,我需要在UML中進行文檔化。目前沒有直接的要求來使用這些UML圖進行綜合,但有一個願望是在未來朝這個方向發展。如何在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++模板可能會出現同樣的問題,特別是如果在語言中引入static if
。
我已經檢查了有條件定義的函數,並且它們有一個通過自定義原型定義的'PrecompileConfigured'標籤。你的意思是我可以在活動圖塊上以類似的方式使用標籤嗎? –
我離開了一會兒。當我回來時,會回覆更詳細的信息... –
在答案中查看我的其他段落。 –