Chinaunix首页 | 论坛 | 博客
  • 博客访问: 652299
  • 博文数量: 63
  • 博客积分: 1265
  • 博客等级: 中尉
  • 技术积分: 789
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-06 21:54
文章分类

全部博文(63)

文章存档

2017年(1)

2016年(3)

2015年(2)

2013年(5)

2012年(20)

2011年(32)

分类: LINUX

2011-09-04 14:16:42

写代码免不了要加入调试信息,在程序头定义一个DEUBG开关很烦,不过gcc早就想到了,有-D选项。

 -D 定义宏(D-define)

-D定义宏有两种情况,一种是-DMACRO 相当于程序中使用#define MACRO 另外可以-DMACRO=A 相当于程序中使用#define MACRO A 这只是一个编绎参数,在连接时没有意义
如: $gcc -c hello.c -o hello.o -DDEBUG
上面为hello.c定义了一个DEBUG宏,某些情况下使用-D 代替直接在文件中使用#define,也是为了避免修改源代码双。例如一个程序希望在开发调试的时候能打印出调试信息,而正式发布的时候就不用打印了,而且发布前不用修改源代码双。可以这样
#ifdefine DEBUG
printf("debug message\n");
#endif
对于这段代码,平时调试的时候就加上-DDEBUG 发布时不用-D选项
与之对应的是-UMACRO参数,相当于#undef MACRO,取消宏定义

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main()
  4. {
  5. #ifdef DEBUG
  6.         printf("this is before\n");
  7. #endif
  8.         printf("helloworld\n");
  9. #ifdef DEBUG
  10.         printf("this is end\n");
  11. #endif
  12.         exit(0);
  13. }
$gcc -c hello.c -o hello.o -DDEBUG -Wall
则./hello输出:
this is before
helloworld
this is end

$gcc -c hello.c -o hello.o -Wall
则./hello输出:
helloworld
阅读(2654) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~