c语言中的宏定义,有着各种好处,当然也有它不好的一面。它实现的三个主要功能是:
1)字符串替换
2)头文件包含
3)通用代码模块的扩展
在代码调试时候,调试宏定义是比较麻烦的一件事,下面就介绍一种比较简单的方法。
#include<stdio.h> #define max(a, b) ((a) > (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b)) int main(void) { int a = 66; int b = 88; int ret; ret = max(a, b); printf("ret is %d\n", ret); ret = min(a, b); printf("ret is %d\n", ret); return 0; }
如果我们需要调试宏定义的话,就需要更高级别的调试信息,-g3
gcc –g3 test,c
gdb a.out
这样我们就能调试宏定义了。
调试宏定义我们主要使用几个gdb命令如下:
1) macro define -- 定义一个新的的宏定义 如:macro define a 3
2) macro expand macroname 展开宏定义 如: macro expand min(a, b)
3) macro list macroname 列出所有用macro define -- 这条命令定义宏定义 如:macro list a
4) macro undef macroname 撤销macroname宏定义
5) info macro macroname 显示宏定义,包括在哪里定义,怎么定义。 如info macro min
如下图:
另外由于宏定义在调试的过程中比较复杂,所以我们应该少用宏定义,尽量用enum inline 来替换。