在因特網上搜索一個解決方案後,我決定詢問我的解決方案是否正常。使用MACROS禁用功能
我正在嘗試編寫一個簡單的模塊化C日誌庫,旨在簡化禁用並特別幫助博士生和研究人員調試算法,儘可能減少日誌記錄系統的影響。
我的問題是,我想爲圖書館的用戶禁止在編譯時記錄系統生成可執行其中記錄器的成本是0
C代碼是這樣做可能:
...
logger_t * logger;
result = logger_init(logger);
if(result == -1) {...}
...
這將簡單地初始化記錄器。尋找一個示例代碼我已經檢查過assert.h頭文件,但是在我的情況下,結果會產生警告列表。事實上,如果使用宏將logger_init()替換爲0,這將導致變量記錄器從不使用。
出於這個原因,我決定用這個辦法:
int logger_init(logger_t *logger);
#ifndef NLOG /* NLOG not defined -> enable logging */
int logger_init(logger_t *logger) {
...
}
#else /* NLOG defined --> the logging system must be disabled */
#define logger_init(logger) (int)((logger = NULL) == NULL)
#endif /* NLOG */
這不會導致警告,我也避免調用函數的開銷。實際上我的第一次嘗試是這樣做的:
即使我不需要它也會繼續調用該函數。
您認爲我的解決方案可以被認爲是一個很好的解決方案嗎?有更好的解決方案嗎?
非常感謝,夥計們! 乾杯, 阿曼多
空函數完成這項工作,編譯器將它們內聯,然後將它們移除 – paulm