C中几个特定宏的介绍(一些调试的小技巧)

来源:互联网 发布:mysql enum 编辑:程序博客网 时间:2024/05/18 01:20

在C的调试中,有几个宏经常被使用来辅助程序员进行程序调试,这里对之进行简单介绍。

1、__FUNCTION__

该宏被用来表示调用该宏的函数。

2、__LINE__

该宏用来表示调用该宏的对应行数。

3、__TIME__

该宏用来表示调用该宏时的时间。

4、__DATE__

该宏用来表示调用该宏的日期。

5 、__FILE__

该宏用来表示调用该宏的文件。

示例程序:

# include <stdio.h>
#include <math.h>

void test(void)
{
printf("the file is %s\n", __FILE__);
printf("the date is %s\n", __DATE__);
printf("the time is %s\n", __TIME__);
printf("the line is %d\n", __LINE__);
printf("the function is %s\n", __FUNCTION__);
return ;
}
int main()
{
test();
return 0;
}

也可以通过宏定义的方式来使用上述的宏:

#define XX_DEBUG(fmt,arg...)printf("<<-XXX-DEBUG->>[%s] [%d] "fmt"\n",__FUNCTION__,__LINE__, ##arg)

但有时,打印信息太多会增加我们查找对应信息的难度,这里我介绍一下如何使自己的printf打印出有颜色的字体。

先介绍一下控制字符的通用格式:

Esc[{attr1};...{attrn}m

其中,

Esc为转移字符,其值为“\033”;

[为常量的左中括号;

{attr1};...{attrn} 是若干属性, 通常是由一个有特定意义的数字代替, 每个属性之间用分号分隔;
m 就是字面常量字符m;

因此,printf的格式便可设为如下格式:

printf("\033[字背景颜色;字体颜色m 字符串 \033[0m" );

其中 \033[0m 是对之前颜色设置的结束,恢复到终端原来的背景色和字体色,以免之前的设置改变别的printf的格式。

接下来对各种属性进行介绍:

ANSI控制码的介绍:

 \033[0m   关闭所有属性 ,即终结之前的颜色设置,恢复到终端的原本背景色和字体色
 \033[1m   设置高亮度  
 \03[4m   下划线  
 \033[5m   闪烁  
 \033[7m   反显  
 \033[8m   消隐  
 \033[30m   --   \033[37m   设置前景色
 \033[40m   --   \033[47m   设置背景色

  \033[nA   光标上移n行
  \03[nB   光标下移n行 
 \033[nC   光标右移n行  
 \033[nD   光标左移n行 
 \033[y;xH设置光标位置  
 \033[2J   清屏  
 \033[K   清除从光标到行尾的内容 
 \033[s   保存光标位置
 \033[u   恢复光标位置   
 \033[?25l   隐藏光标  
  \33[?25h   显示光标

颜色代码:

字背景颜色范围: 40--49                   字颜色: 30—39             
  40: 黑                           30: 黑                 
  41: 红                           31: 红                
 42: 绿                           32: 绿                
 43: 黄                           33: 黄                
  44: 蓝                           34: 蓝               
 45: 紫                           35: 紫                 
  46: 深绿                       36: 深绿                 

 47: 白色                    37: 白色

因此,debug的printf最终可改为

#define XX_DEBUG(fmt,arg...) \

printf("\033[字背景颜色;字体颜色m<<-XXX-DEBUG->>[%s] [%d]\033[0m \033[字体颜色m"fmt"\033[0m\n",__FUNCTION__,__LINE__, ##arg)

程序如下:

#include <stdio.h>
#define XX_DEBUG(fmt,arg...)   \
printf("\033[41;32m <<-XXX-DEBUG->>[%s] [%d]\033[0m \033[34m"fmt"\033[0m\n",__FUNCTION__,__LINE__, ##arg)
int main()
{
XX_DEBUG("Hello,word %d",123);
printf("haha\n");
return 0;
}

运行结果如图:


PS:设置后的结果和终端有一定的关系。

原创粉丝点击