第22课 - 条件编译使用分析

第22课 - 条件编译使用分析

这节课我们介绍如何使用C语言中的条件编译。

市面上的电子产品一般有低配版、中配版、高配版,那相应的软件也要开发三个版本吗?显然不是这样的,我们一般在同一套代码中使用条件编译区分不同的版本。

1. 基本概念

(1)c 程序的编译一般经过如下四个过程

       

  条件编译是在预处理阶段由预处理器完成的,预处理器根据条件编译指令选择使用哪些代码。

(2)条件编译的行为类似于if ...else...语句,但他们有本质的区别。前者在预处理阶段进行分支判断,后者在程序运行期间进行分支判断

 1 // #include <stdio.h>
 2 
 3 #define C 1
 4 
 5 int main()
 6 {
 7     const char* s;
 8 
 9     #if( C == 1 )   // 条件成立,选择该分支
10         s = "This is first printf...\n";
11     #else
12         s = "This is second printf...\n";
13     #endif
14 
15     // printf("%s", s);
16     
17     return 0;
18 }

使用 gcc -E 命令查看该程序由预处理器处理后的结果

swj@ubuntu:~/c_course/ch_22$ gcc -E test.c
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "test.c"

int main()
{
const char* s;

s = "This is first printf...\n";

return 0;
}

(3)除了在代码中定义宏,可以通过命令行定义宏       -D后面的宏会在预处理时传递到程序中(Ddefinition的缩写)

gcc –Dmacro=value file.c    // 针对 #if 语句

gcc –Dmacro file.c               // 针对 #ifdef 或 ifndef 语句

                                           // 查看gcc的man手册,这种形式下macro的值为1  

     

下面验证-D选项的功能

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     const char* s;
 6 
 7     #if( C == 1 )
 8         s = "This is first printf...\n";
 9     #else
10         s = "This is second printf...\n";
11     #endif
12 
13     printf("%s", s);
14     
15     return 0;
16 }

上面代码删除了#define C 1,观察下面的编译命令及程序的输出结果

    

这里如果直接 gcc test.c 程序也可以编译通过,在预处理 #if( C==1 ) 时,如果没有定义C,那么这里就为“假”(并没有报错)。

 2. #include的本质

 

3. 条件编译的意义

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值