Chinaunix首页 | 论坛 | 博客
  • 博客访问: 530486
  • 博文数量: 104
  • 博客积分: 2089
  • 博客等级: 大尉
  • 技术积分: 1691
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-29 08:48
文章分类

全部博文(104)

文章存档

2015年(1)

2013年(13)

2012年(31)

2011年(59)

分类: C/C++

2012-10-26 13:34:00

-D 参数可以给代码中的宏打开一扇门。简单的代码

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. #ifdef WHO
  3. #define NAME "joel"
  4. #elif WHO_NO
  5. #define NAME "no name"
  6. #else
  7. #error no mane
  8. #endif
  9. int main()
  10. {
  11.     printf("hello [%s]\n",""NAME"");
  12.     printf("%d\n",
  13. #ifdef WHO
  14.             WHO
  15. #elif defined(WHO_NO)
  16.             WHO_NO
  17. #endif
  18.             );
  19. }
编译下

点击(此处)折叠或打开

  1. gcc 123.c
  2. 123.c:11:2: error: #error no mane
  3. 123.c: In function ‘main’:
  4. 123.c:15: error: expected ‘)’ before ‘NAME’
  5. 123.c:22: error: expected expression before ‘)’ token
有错。
可以这样gcc -DWHO 123.c
    ./a.out
    hello [joel]
    1
同时也知道,-DWHO 相当于在代码
    #define WHO 1
1 就是默认值。
其实在代码中我们应该更严密些。不应该 用 #if #elif 后直接探测一个宏是否被定义。这样写会更好

点击(此处)折叠或打开

  1. 探测宏是否被定义
  2. #ifdef WHO
  3. #if defined(WHO)
  4. #elif defined(WHO)

这样避免简单在 头部定义
#define WHO
#define WHO_NO
这样会报错的



阅读(952) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~