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)能夠在該方式下編譯經過。 編譯器

相關文章
相關標籤/搜索