#ifdef DEBUGTEST
functionName1(); % write log
#endif
functionName1(); % write log
void functionName1()
{
#ifdef DEBUGTEST
% function body
#endif
return;
};
以上兩個例子是期望在調用function Name1函數之前優先進行#ifdef的判斷,但是在實現的時候都不太好,第一個例子中每次寫log都需要三行代碼來實現,如果寫log的地方比較多,就會讓程序看起來很亂;第二種方法雖然只有一行就能寫log,但是如果DEBUGETESST宏關閉後仍然需要到寫log的函數種執行一遍,這樣增加了程序的運行成本,爲了避免上述兩種情況,可以使用帶參數宏定義的方法將第一個例子中的#ifdef隱藏起來。例子如下(實際宏定義時候需要使用#ifdef來嵌套#define)。
#ifdef DEBUGTEST
#define FUNCTIONNAME1(logTitle,pBuffer,pBufferSize) \
functionName1(logTitle,pBuffer,pBufferSize)
#else
#define FUNCTIONNAME1(logTitle,pBuffer,pBufferSize)
#endif
functionName1函數的函數聲明以及定義:
% 聲明
void functionName1(const char *logTitle,int *pBuffer,int pBufferSize);
% 定義
void functionName1(const char *logTitle,int *pBuffer,int pBufferSize)
{
return;
};
這樣就可以在程序中直接調用FUNCTIONNAME1(logTitle,pBuffer,pBufferSize)實現對functionName1(const char *logTitle,int *pBuffer,int pBufferSize)的替換調用。