作为一个Code Monkey在程序调试方面是横重要(我们不仅需要纵向发展,也需要横向发展)。
调试代码,个人觉得是一个Code Monkey的自我修养。这里我就do()while(0),linux内核c语言中妙用的一种容错处理方式。
话不多说,直接搬砖,code直接抛砖引玉:
/**********************************
do{...}whle(0)用途
C语言在linux内核中的巧用
主要用于信息调试(保证至少有一次执行结果)
demo1
**********************************/
#include<stdio.h>
int main(void)
{
while(0)
{
printf("进入调试界面\n");
}
do
{
printf("进入调试界面\n");
}while(0);
return 0;
}
/**********************************
demo2
内核代码采用do{...}while(0);这种结构可以保证无论
在什么地方都可以正确的执行一次
//说明:##这里起到替换的作用
**********************************/
#include<stdio.h>
#include<stdarg.h>
#define db_error(fmt,...) \
do{ \
fprintf(stderr,"(error):");\
fprintf(stderr,fmt,##__VA_ARGS__); \
}while(0)
#define db_msg(fmt,...) \
do{ \
fprintf(stdout,"(msg):");\
fprintf(stdout,fmt,##__VA_ARGS__); \
}while(0)
#define db_warn(fmt,...) \
do{ \
fprintf(stdout,"(warn):");\
fprintf(stdout,fmt,##__VA_ARGS__); \
}while(0)
#define db_debug(fmt,...) \
do{ \
fprintf(stdout,"(debug):");\
fprintf(stdout,fmt,##__VA_ARGS__); \
}while(0)
int main(void)
{
db_error("E\n");
db_warn("W\n");
db_debug("D\n");
db_msg("M\n");
return 0;
}