嵌套#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)的替换调用。

猜你喜欢

转载自blog.csdn.net/ljl86400/article/details/104066390