嵌套#ifdef的帶參宏定義用法

 

#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)的替換調用。

發佈了101 篇原創文章 · 獲贊 110 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章