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—3940: 黑 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:设置后的结果和终端有一定的关系。
- C中几个特定宏的介绍(一些调试的小技巧)
- gdb 调试c/c++的一些小技巧
- gdb 调试c/c++的一些小技巧
- Google调试的几个小技巧
- js前端调试的几个小技巧
- objective-c 编程的几个调试技巧
- 调试lib库的一些小技巧
- android 调试的一些小技巧
- VC调试的一些小技巧
- JS调试的一些小技巧
- GUN C 的几个小技巧
- C++中常用的几个小技巧
- C++中几个常用的小技巧
- MyEclipse中几个小的技巧
- 详解Visual Studio调试中断点几个的小技巧
- 本文介绍如何在 shell 命令行中过滤 adb logcat 输出的几个小技巧。
- C++Builder的一些小技巧
- Linux C程序设计的一些小技巧
- 远程串口应用在实验数据采集
- HDU 5877 Weak Pair
- eclipse内存溢出变慢解决方法
- 二维数组练习03_计算矩阵边缘元素之和
- 安卓Android打包生成正式版地图jks配置debug版及release版
- C中几个特定宏的介绍(一些调试的小技巧)
- 用java复制粘贴图片出现无法访问
- Java序列化
- Multi-Programming-16 线程死锁实现方式
- 什么是多线程
- 机器学习课堂笔记2
- 1.8const关键字
- 在数学建模中常用的方法
- 浅谈android 点击事件分发处理流程