C语言之 条件编译和预处理指令

条件编译

在编译⼀个程序的时候我们如果要将⼀条语句(⼀组语句)编译或者放弃是很⽅便的。因为我们有条件编译指令。
⽐如说:
调试性的代码删除可惜,保留⼜碍事,所以我们可以选择性的编译。

复制代码
#define M 1
int main()
{
	int n = 10;
//#if M==1
#if M==0
	printf("%d", n);
#endif
	return 0;
}

1.#if 常量表达式

复制代码
int main()
{
	int a = 1;//这里为什么不执行呢,这就涉及到条件编译指令的预处理了,而局部变量是在编译之后才开始运行的
#if a == 1//#后面一定要是常量,不能是变量
		printf("你师弟呢");
#endif
	return 0;
}

2.多个分⽀的条件编译

复制代码
#define M 5
int main()
{
#if M==1
	printf("hehe\n");
#elif M==2
	printf("haha\n");
#elif M==3
	printf("hihi\n");
#else
	printf("呵呵\n");
#endif
	return 0;
}

3.判断是否被定义

复制代码
#define LISI 10
int main()
{
//#ifdef LISI//ifdef代表的是被定义的
#ifndef LISI//ifndef代表的就是未被定义的
	printf("lisi");
#endif
	return 0;
}

4.嵌套指令

复制代码
#if defined(OS_UNIX)//如果被定义就往下,未被就删除
     #ifdef OPTION1
         unix_version_option1();//内部内容也一样
     #endif
     #ifdef OPTION2
         unix_version_option2();
     #endif
 #elif defined(OS_MSDOS)//一样看是否被定义
     #ifdef OPTION2
         msdos_version_option2();
     #endif

嵌套指令防止头文件的重复调用,防止浪费时间空间

#ifndef TEST_H

#define TEST_H

//头⽂件的内容

#endif //TEST_H

或者用 #pragma once,现在大多数使用这个

头⽂件的包含

头⽂件被包含的⽅式:

本地⽂件包含

include "filename"

查找头⽂件直接去标准路径下去查找,如果找不到就提⽰编译错误。
使⽤ "" 的形式包含库⽂件查找的效率就低些,当然这样也不容易区分是库⽂件还是本地⽂件了。

嵌套⽂件包含

我们已经知道, #include 指令可以使另外⼀个⽂件被编译。就像它实际出现于 #include 指令的
地⽅⼀样。
这种替换的⽅式很简单:预处理器先删除这条指令,并⽤包含⽂件的内容替换。
⼀个头⽂件被包含10次,那就实际被编译10次,如果重复包含,对编译的压⼒就⽐较⼤。
其它预处理指令

复制代码
#if
#include
#ifndef
#ifdef
#elif
#define
#endif
#pragma
#else
#undef
相关推荐
Christo31 分钟前
AAAI-2013《Spectral Rotation versus K-Means in Spectral Clustering》
人工智能·算法·机器学习·数据挖掘·kmeans
葵花楹3 分钟前
【补题】【atcoderabc434】【codeforces1067】
算法
roman_日积跬步-终至千里10 分钟前
【模式识别与机器学习】AdaBoost算法:集成学习的基本原理与AdaBoost算法的应用
算法·机器学习·集成学习
mit6.82413 分钟前
中位数贪心|前缀和_距离和ret=l+r_1
算法
一匹电信狗14 分钟前
【LeetCode】栈和队列进阶题目
c++·算法·leetcode·职场和发展·stl·栈和队列
机器学习之心16 分钟前
198种组合算法+优化TCN时间卷积神经网络+SHAP分析+新数据预测+多输出!深度学习可解释分析,强烈安利,粉丝必备!
深度学习·算法·shap分析·tcn时间卷积神经网络
代码游侠17 分钟前
数据结构——线性表
linux·c语言·数据结构·学习·算法
吃着火锅x唱着歌19 分钟前
LeetCode 3371.识别数组中的最大异常值
数据结构·算法·leetcode
元亓亓亓21 分钟前
LeetCode热题100--74. 搜索二维矩阵--中等
算法·leetcode·矩阵
zzzsde32 分钟前
【C++】异常:概念及使用
开发语言·c++·算法