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)能够在该方式下编译经过。 编译器