7. GCC 的 -D 编译选项
在使用 GCC 编译器对 C 语言进行编译时,可以使用 -D 选项临时为正在编译的文件的预处理阶段定义没有参数的宏。
几乎所有的 C 语言的编译器都有类似功能。请使用其它编译器的朋友自行解决各自编译器的问题。
-D 现象的用法如下:
定义不带参数且没有 值 的宏。
gcc -D 宏名 xxx.c
等价于在 xxx.c 文件的最上面添加如下一行
#define 宏名
如:gcc -D ZH_CN xxx.c 等同于 #define ZH_CN。
定义不带参数并且有 值 的宏。
gcc -D 宏名=值 xxx.c
等价于在 xxx.c 文件的最上面添加如下一行
#define 宏名 值
如:gcc -D ZH_CN=100 xxx.c 等同于 #define ZH_CN 100。
改写上一节条件编译的代码如下:
// filename: cond_comp2.c
#include <stdio.h>
// 去掉了此处的宏定义部分。
int main(int argc, char * argv[]) {
#ifdef ZH_CN
printf("欢迎来到北京!\n");
#elif defined(ZH_HK) || defined(ZH_MO)
printf("歡迎來到北京!\n");
#elif defined(KO_KR)
printf("베이징에 어서 오세요!\n");
#else
printf("welcome to beijing!\n");
#endif
return 0;
}
编译和运行结果如下:
weimingze@mzstudio:~$ gcc -o cond_comp2 cond_comp2.c
weimingze@mzstudio:~$ ./cond_comp2
welcome to beijing!
使用 -D ZH_CN 编译后运行结果如下:
weimingze@mzstudio:~$ gcc -D ZH_CN -o cond_comp2 cond_comp2.c
weimingze@mzstudio:~$ ./cond_comp2
欢迎来到北京!
使用 -D KO_KR 编译后运行结果如下:
weimingze@mzstudio:~$ gcc -D KO_KR -o cond_comp2 cond_comp2.c
weimingze@mzstudio:~$ ./cond_comp2
베이징에 어서 오세요!
使用 -D ZH_HK=666 编译后运行结果如下:
weimingze@mzstudio:~$ gcc -D ZH_HK=666 -o cond_comp2 cond_comp2.c
weimingze@mzstudio:~$ ./cond_comp2
歡迎來到北京!
实验:
- 练习使用 GCC 的
-D选项进行条件编译。