我有一個項目,一個情況下我必須控制它是如何工作的一些經常變化的預處理器#define
秒 - 例如:生成兩個函數與C預
void myfunction(int num, mystruct* content) {
doSomethingTo(content);
//...
#ifdef FEATURE_X
feature_x(content);
#endif
}
這工作得很好,雖然它每次都必須重新編譯,所以它在「每次都必須重新編譯的東西」文件中。我想將它推入一個[靜態]庫。我確定有改變它怎麼叫(已經採摘myFunction
一個函數指針),所以我想,要變成
void myfunction(int num, mystruct* content) {
doSomethingTo(content);
//...
}
void myfunction_featureX(int num, mystruct* content) {
doSomethingTo(content);
//...
feature_x(content);
}
我需要做的這幾個地方,所以使用一個單獨的圖書館(一個和一個沒有-D FEATURE_X
)爲每個不是一個可接受的選項。我可能與複製/粘貼,但這會導致代碼重用,有一個副本,但不是另一個修復錯誤的風險。
這是'代碼重用'和重構的完美反例。你應該明確地不這樣做。 – 2013-02-02 23:45:16