总结: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



资料引用

posted @   布丁Plus  阅读(185)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示