C++中宏包含空的参数

    inline void PrintValidateMsg(const char* file,int line,const char* cond,const char* msg)
    {
        if(msg) 
            fprintf(stderr,"%s(%d):%s invalid:%s\n",file,line,cond,msg); 
        else 
            fprintf(stderr,"%s(%d):%s invalid\n",file,line,cond); 
    }
    #define MY_VALIDATE(cond,ret,msg) \
    if(cond) { \
    } \
    else { \
        PrintValidateMsg(__FILE__,__LINE__,#cond,msg); \
        return ret; \
    } \
    struct ThreadKitDummyClass

一、当须要返回为void时,ret字段须要为空,以下面只有2个参数,中间的为空内容。linux

void fun()
{
    //......
    int i=0;
    MY_VALIDATE(i==0,,NULL);
}

二、目前主流的编译器均可以正确编译,C99支持空的参数。code

三、上次在linux gcc 4.4下,makefile中被加上-pedantic,好象是使用了C90标准,结果编译失败。用MY_VALIDATE(i==0,void(0),NULL)能够在该方式下编译经过。 编译器

相关文章
相关标签/搜索