今天写了个宏来处理函数返回的结果,结果编译后总是提示:
iplb_core.c:21:33: error: expected ‘;’ before ‘if’
#define CORE_IF_ERROR(res,estr) if((res)<0){error_print("error:%s\n",(estr));return -1;}
但是宏的写法明明是没有问题的,按理不应该处错误的。我又找了会错,发现这句错误后边还跟着一句:
iplb_core.c:202:2: note: in expansion of macro ‘CORE_IF_ERROR’
马上定位到202行,原来是这行的前一行忘记加“;”了。
总结一下,gcc在预编译的时候会把宏所在语句的错误归结到宏的定义上,让人误以为是宏定义错了,其实是使用宏的语句有错误。