查看C语言宏函数(预处理/gdb)
来源:互联网 发布:微信js安全域名设置 编辑:程序博客网 时间:2024/06/04 18:54
查看C语言宏函数(预处理/gdb调试阶段)
edit by pinyue 2012.2.17 night
当我们编写完C源程序后很想看一看自己写的宏展开后是否正确,此文就讨论一下目前所接触的查看宏的方法:
1~ 预处理阶段$ gcc -E 源代码.c -o 源代码.i
$ vim 源代码.i //打开生成的.i文件,翻到最后即可看到自己编写的宏的展开
2~ 调试阶段
调试阶段即通过gdb调试器查看宏的展开。
$ gcc -gdwarf-2 -g3 源代码.c -o 源代码名
编译阶段加上参数“-gdwarf-2 -g3”,具体大家可以参见一下man gcc,“-o 源代码名”可以不写,不写生成的文件为a.out。
$ gdb 源代码名(或者a.out)
(gdb) macro expand 宏定义体
eg. 我们先看第1~种方法:
#include <stdio.h>
#define DOUBLE 1.23456
int main(void)
{
double d;
d = DOUBLE;
printf("%lf\n", d);
return 0;
}
上面的代码非常简单,大家一看就明白了……我们看一下预处理后的结果:
int main(void)
{
double d;
d = 1.23456;
printf("%lf\n", d);
return 0;
}
d = 1.23456;可以看到DOUBLE在这里展开了
我们再来看第2~种方法:
下面为*.h中的部分代码:
#define random_char() (rand() % 26 + 'a')
#define random_float() (rand() % 100 / 10.0)
#define FILL(array, sz, type) \
if (strcmp(type, "char") == 0) \
for (i = 0; i < sz; ++i) \
array[i] = random_char(); \
else \
for (i = 0; i < sz; ++i) \
array[i] = random_float()
在*.c中我们的调用语句如下:
FILL(a, M, "char");
编译命令如上,然后进入调试命令行:
(gdb) macro expand FILL(a, M, "char")
expands to: if (strcmp("char", "char") == 0) for (i = 0; i < 32; ++i) a[i] = (rand() % 26 + 'a'); else for (i = 0; i < 32; ++i) a[i] = (rand() % 100 / 10.0)
(gdb) macro expand random_float()
expands to: (rand() % 100 / 10.0)
note:宏定义一定要写完整,否则不会显示展开结果的!比如下面这样:
(gdb) macro expand FILL
expands to: FILL
(gdb) macro expand random_float
expands to: random_float
好了,看到以上的结果,以后调试程序会很方便吧!辛苦了好久才搞定的,大家如果有好的方法要多多分享哦^_^
No pains, no gains!
- 查看C语言宏函数(预处理/gdb)
- gdb define查看一个宏(C预处理宏)
- C 语言常用的预处理-宏函数
- C语言预处理和函数
- c语言预处理 宏
- C语言(预处理)
- C语言宏定义与预处理、函数和函数库
- C语言学习(五)函数,预处理命令
- C语言——预处理命令(宏)有些问题,宏和函数都可以
- C语言——数组、函数、预处理
- C语言--预处理指令、枚举、递归函数
- c语言预处理--宏定义
- c语言预处理宏定义
- C语言专题精讲篇_4.6.C语言宏定义与预处理、函数和函数库
- c语言预处理,包含(宏定义,包含,条件编译)
- 嵌入式学习11(C语言预处理与宏)
- C语言-预处理指令(Preprocessing Directive)-宏定义
- c语言之宏预处理命令
- Java中成员变量和属性之间的关系
- cache和write buffer读写算法
- 使用apt-file查询某个头文件所在的包
- 图片放大镜jQZoom参数说明
- android UI进阶之实现listview中checkbox的多选与记录
- 查看C语言宏函数(预处理/gdb)
- 标准C++中的string类的用法总结
- javascript 浏览器提示有消息
- c++中string的用法
- uva 196 - Spreadsheet
- jQZoom 使用说明
- Flex - Simple Maven Project
- SqlServer递归查询
- 三层架构之UI层完全分离