您的位置:首页 > 其它

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

2017-08-27 15:23 239 查看
在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:设置后的结果和终端有一定的关系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  调试宏