2011-05-22 39 views
0

我看到使用像#ifdef這樣的結構在條件編譯上有一些好處,比如更小的編譯文件大小,更快的執行速度和更容易的調試等,但是什麼時候適用於另一種呢?當被評估的條件語句只能在運行時確定時,是否使用運行時條件檢查是一種最佳做法?何時適合使用條件編譯而不是常規的if-else語句?

在我看來,將#ifdefs與常規的if-then-else語句混合使得代碼變得難看難懂,所以我傾向於避免條件編譯。但是我注意到,在很多C#日誌類的例子中,條件編譯用於根據是否定義諸如DEBUG/SHIP/TRACE等符號來確定何時執行日誌記錄。

回答

2

最好儘量減少#ifdef的使用。就像你說的,他們使代碼更難讀取和調試。

當針對不同的平臺或調試/發佈版本之間存在差異時,它們可能是不可避免的。

性能可能可以考慮使用#ifdef的例如用於調試,但是在大多數情況下,額外的條件語句檢查日誌級別的影響可以忽略不計。我會說你必須剖析代碼並確定這是將條件邏輯轉換爲#ifdef的

之前的瓶頸
0

條件編譯應該用於編譯不同平臺的相同源代碼,或者如果您有不同版本的程序(例如測試版本和完整版本)。