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