当前位置: 技术问答>linux和unix
宏定义里面不能再包含条件编译语句吗?见内容
来源: 互联网 发布时间:2015-12-05
本文导语: 下面的宏定义编译报错 #define MGR_MEM_ERR_RETURN(p) if(NULL == p) { #ifdef _DEBUG printf("fail to alloc memoryn"); #endif return; } 错误如下: : error C2162: expected macro formal parameter : error C2162: expected macro formal parameter 为什...
下面的宏定义编译报错
#define MGR_MEM_ERR_RETURN(p)
if(NULL == p)
{
#ifdef _DEBUG
printf("fail to alloc memoryn");
#endif
return;
}
错误如下:
: error C2162: expected macro formal parameter
: error C2162: expected macro formal parameter
为什么?
#define MGR_MEM_ERR_RETURN(p)
if(NULL == p)
{
#ifdef _DEBUG
printf("fail to alloc memoryn");
#endif
return;
}
错误如下:
: error C2162: expected macro formal parameter
: error C2162: expected macro formal parameter
为什么?
|
#ifdef不能在一行里面完成,#define又要求必须在一行里面定义,可能不能嵌套。
分开写吧:
#ifdef DEBUG
#define MGR_MEM_ERR_RETURN(p) if(NULL == p)
{
printf("fail to alloc memoryn");
return ;
}
#else
#define MGR_MEM_ERR_RETURN(p) if(NULL == p)
{
return ;
}
#endif
分开写吧:
#ifdef DEBUG
#define MGR_MEM_ERR_RETURN(p) if(NULL == p)
{
printf("fail to alloc memoryn");
return ;
}
#else
#define MGR_MEM_ERR_RETURN(p) if(NULL == p)
{
return ;
}
#endif