1.输出时带上文件名、函数名、代码行。
#define PRINT(...) do{ \
printf("%s---%s---%d---", __FILE__, __func__, __LINE__); \
printf(__VA_ARGS__); \
}while(0)
2.转成字符串,特殊符号不需要转义
#define STR(...) #__VA_ARGS__
int main()
{
printf("%s\n", STR(this is a str,no escape,json:{"a":"b"}) );
//对比
printf("%s\n", "this is a str, escape, json:{\"a\":\"b\"}" );
return 0;
}
3.置零
#define SET_0(x) memset((x), 0, sizeof((x)))
4.最大最小值
#define INT_MAX(a, b) \
({ typeof((a)) _a = (a); typeof((b)) _b = (b); _a>_b?_a:_b; })
#define INT_MIN(a, b) \
({ typeof((a)) _a = (a); typeof((b)) _b = (b); _a<_b>
5.用日志记录代替assert,避免程序退出,并记录日志
extern void Log_write(const char *filename, const char *content);
#define CATCH(try) \
do{ \
if(!(try)) { \
Log_write("FILE_NAME", #try); \
} \
}while(0)