現在我printPassport在 myfile.h 檔案中有一個除錯功能。它是這樣宣告的:
#ifdef DEBUG
void printPassport(passport_t *passport);
#endif
這似乎是做事的正確方法,盡管我已經有一段時間沒有使用 C,所以如果我錯了,請糾正我。
我應該在 myfile.c 中的函式名稱周圍放置保護嗎?即我應該做
void printPassport(passport_t *passport) {
...
}
或者
#ifdef DEBUG
void printPassport(passport_t *passport) {
...
}
#endif
在 myfile.c 中?
uj5u.com熱心網友回復:
如果你保護這個函式,那么當你沒有定義DEBUG它時它不會被編譯,這意味著代碼將與系統的其余部分不同步。然后,當您確實需要除錯代碼時,您必須先修復它,然后才能使用它。
在許多方面最好讓函式在大部分時間被編譯,以便知道它是有效的。由于您在頭檔案中有定義,因此只需為正常構建保留定義(和編譯)的函式即可。您可以使用條件,例如#ifndef RELEASE_BUILD從最終發布的產品中擠出未使用的功能。但關鍵是要保證函式正常編譯,即使不正常使用。您還需要考慮如何保護對函式的呼叫。是否有運行時除錯級別來激活除錯,或者它是嚴格的編譯時決定。如果它是在編譯時決定的,您將需要在函式呼叫周圍有合適的保護,或者對可以轉換為((void)0)或由編譯器類似的函式的宏化呼叫。
如果該函式是靜態的——在一個源檔案中是本地的,那么考慮將其設為static inline. 這將被編譯,但如果從未呼叫它而不會觸發有關未使用static函式的投訴,即使沒有實際呼叫該函式,也會被忽略。
uj5u.com熱心網友回復:
的NDEBUG宏控制assert宏; 重用它而不是使用另一個宏可能很有用。
您是否希望該功能存在,取決于目標。如果你不需要它,你可以節省編譯時間,并通過在 .cpp 中保護它而不用它來使程式更加一致。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/363832.html
