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
歡迎來到北京!

实验: