总结:C语言条件编译

条件编译指令选择哪些代码被编译,哪些代码不被编译。

可以根据表达式的值或某个特定宏是否被定义来确定编译条件。

#           空指令
#include    包含一个源代码文件
#define     定义宏
#undef      取消已定义的宏
#error      停止编译并显示错误信息

#if,如果给定条件为真,则编译下面代码
#ifdef,如果宏已经定义,则编译下面代码
#ifndef,如果宏没有定义,则编译下面代码
#endif,终止#if指令
#elif,综合#else和#if指令的作用,如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#else,用于某个#if指令之后,当前面的#if指令的条件不为真时,就编译#else后面的代码
defined(), 判断标识符是否定义过,#if defined 等价于 #ifdef,#if !defined 等价于 #ifndef。

条件编译的用途

1,防止头文件重复包含

避免同一个头文件被多次包含、重复引用

#ifndef _HEADERNAME_H_
#define _HEADERNAME_H_

#include<headname.h>
或
#include"headname.h"

#endif

#include<headname.h>, 预处理程序在编译器自带的或外部库的头文件中搜索被包含的头文件;

#include"headname.h",预处理程序在当前被编译的应用程序的源代码文件中搜索被包含的头文件,若找不到,再搜索编译器自带的头文件。

2,编译部分代码

组合方式1

如果宏名称已经定义,则对程序段 1 进行编译;否则对程序段 2 进行编译。

#ifdef 宏名称
/*程序段1*/
#else
/*程序段2*/
#endif

组合方式2

#ifndef 指令的含义正好与 #ifdef 指令相反,因此它表示如果宏名称未被定义,则对程序段 1 进行编译,否则对程序段 2 进行编译。

#ifndef 宏名称
/*程序段1*/
#else
/*程序段2*/
#endif

组合方式3

如果表达式1的值为真(非 0),则对程序段1进行编译,如果表达式2的值为真,则程序段2进行编译,否则对程序段3进行编译。

#if 表达式1
/*程序段1*/
#elif 表达式2
/*程序段20
#else
/*程序段2*/
#endif

组合方式4

如果未定义宏1,且已定义宏2,则对程序段进行编译

#if !defined(宏1)&&defined(宏2)
/*程序段*/
#endif

资料引用

C语言 条件编译详解_c编译选项不按条件进行编译-CSDN博客

条件编译指令(符号),C语言条件编译指令完全攻略 - 知乎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值