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