-D 参数可以给代码中的宏打开一扇门。简单的代码
- #include <stdio.h>
- #ifdef WHO
- #define NAME "joel"
- #elif WHO_NO
- #define NAME "no name"
- #else
- #error no mane
- #endif
- int main()
- {
- printf("hello [%s]\n",""NAME"");
- printf("%d\n",
- #ifdef WHO
- WHO
- #elif defined(WHO_NO)
- WHO_NO
- #endif
- );
- }
编译下
- gcc 123.c
- 123.c:11:2: error: #error no mane
- 123.c: In function ‘main’:
- 123.c:15: error: expected ‘)’ before ‘NAME’
- 123.c:22: error: expected expression before ‘)’ token
有错。
可以这样gcc -DWHO 123.c
./a.out
hello [joel]
1
同时也知道,-DWHO 相当于在代码
#define WHO 1
1 就是默认值。
其实在代码中我们应该更严密些。不应该 用 #if #elif 后直接探测一个宏是否被定义。这样写会更好
- 探测宏是否被定义
- #ifdef WHO
- #if defined(WHO)
- #elif defined(WHO)
这样避免简单在 头部定义
#define WHO
#define WHO_NO
这样会报错的
阅读(1049) | 评论(0) | 转发(0) |