NO11.条件编译使用分析

条件编译的行为类似于C语言中的if...else..根据条件来确定是否进行相关编译,

要知道条件编译是预编译指示命令,在进行编译已经选择要编译内容,及根据选择编译某段代码

 

预编译器根据条件编译指令有选择的删除代码,编译器不知道代码分支的存在

可以通过命令行定义宏:

gcc -Dmacro=value file.c
or
gcc -Dmacro file.c

 

#include的本质是将已经存在的文件内容嵌入到当前文件中,间接包含也会产生嵌入文件内容的操作

 

通过条件编译可以解决头文件重复包含的编译错误,这也是大多说编写头文件时候的固定格式

例子:

常用的几个条件编译:

//#if  条件编译
//一般用于产品各个版本的语言包
#include<stdio.h>
#include<stdlib.h>

//#都是预处理指令,条件表达式必须在预处理里面
//所以条件表达式必须是宏表达式

//双分支条件编译
//#if 条件表达式
//代码段1
//#else
//代码段2
//#endif

//#endif结束条件编译
//#if,#else和C语言里的if else功能一样,但是时间开销不一样
//if else会编译所有的代码,源码会较长,编译时间会较长
//程序体积大,占用更多内存,运行时间长
//#if,#else只编译符合条件的语句,有效减少被编译的语句,
//缩短源码长度,缩短程序执行时间

//多分支条件编译
//#if 条件表达式1
//代码段1
//#elif 条件表达式2
//代码段2
//#elif 条件表达式3
//代码段3
//#elif 条件表达式4
//代码段4
//#else
//代码段5
//#endif

//检测宏是否定义
//#ifdef 宏定义
//代码段1
//#endif

//#ifdef M 检测M这个宏是否定义,定义了就执行代码段1,没有定义就不执行任何操作
//#ifdef一般用于开启某个功能

//检测宏是否未定义
//#ifndef 宏定义
//代码段1
//#endif
//#ifndef M 检测M这个宏是否未定义,没有定义就执行代码段1,定义就不执行任何操作
//#ifndef一般用于开启某个功能或者include 重包含排错

//例如
//#ifndef OPENS
//#define OPENS
定义函数或者执行操作,这样就不可能重复的定义函数或者操作了,因为如果已经定义了就不会执行这段代码
//#endif




#define LANGUA 'd'

void main(){
    //双分支条件编译
#if LANGUA=='e'//这里的条件表达式是宏表达式
    printf("条件一!\n");
#else
    printf("条件二\n");
#endif

    //多分支条件编译
#if LANGUA=='e'//这里的条件表达式是宏表达式
    printf("条件三\n");
#elif LANGUA=='d'
    printf("条件四\n");
#else
    printf("条件五\n");
#endif

    //检测宏是否定义
#define M
#ifdef M
    system("color 3f");
#endif

    //检测宏是否未定义
#ifndef N
    system("title test");
#endif

    system("pause");
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值