對於調試,我有很多調用我的應用程序中的調試日誌功能。當然,在生產版本中,這些調試調用需要被跳過。而是寫:調試和預處理指令
#if DEVEL == 1
Log::debug(...);
#endif
繞到調試功能,我決定所有調用寫在調試功能本身如下:
#if DEVEL != 1
return;
#endif
將無用的函數調用的開銷由編譯器來避免或者我爲了性能的原因使用(許多醜陋的)#if #endif
構建更好?
對於調試,我有很多調用我的應用程序中的調試日誌功能。當然,在生產版本中,這些調試調用需要被跳過。而是寫:調試和預處理指令
#if DEVEL == 1
Log::debug(...);
#endif
繞到調試功能,我決定所有調用寫在調試功能本身如下:
#if DEVEL != 1
return;
#endif
將無用的函數調用的開銷由編譯器來避免或者我爲了性能的原因使用(許多醜陋的)#if #endif
構建更好?
而是擔心優化的,你可以做一個簡單的一招:
#if DEVEL == 1
#define LOG_DEBUG(...) Log::Debug(__VA_ARGS__) // variadic macro
#else
#define LOG_DEBUG
#endif
現在使用LOG_DEBUG
處處保持簡單。
你爲什麼不檢查?
使用gcc只需編譯-S
,並看看輸出。
並打開優化器: - O或-O3 – 2011-06-12 22:39:09
不錯。但是,爲什麼#else版本沒有參數? – 2011-06-12 11:35:59
@Kerrek,因爲只有2個條件。如果它不是'DEVEL == 1',那麼它肯定會是'DEVEL!= 1'。 – iammilind 2011-06-13 03:31:44
沒有抱歉,我的意思是爲什麼LOG_DEBUG的第一個版本有參數(括號),但第二個版本沒有?如果你寫了'LOG_DEBUG(「hello」)',那麼第二個宏就會擴展到'「hello」',而不是什麼? – 2011-06-13 09:15:54