当前位置: 首页 > news >正文

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

相关文章:

  • 数据结构-树(详解)
  • 麒麟服务器操作系统Sqlite部署手册
  • 神聖的綫性代數速成例題4. 矩陣乘法的充要條件、矩陣運算的定義
  • Matlab 液位系统根据输入和输出信号拟合一阶传递函数
  • 【网络】什么是公共 API(Application Programming Interface)?
  • 发现一个GoVCL的问题
  • 并发基础—三大问题:可见性、原子性、有序性
  • 计算机网络笔记再战——理解几个经典的协议HTTP章4
  • PowerToys:解锁Windows生产力的终极武器
  • Java开发:常用关键字
  • 快速迭代:利用 nodemon 和其他工具实现 Express.js 热更新
  • QEMU源码全解析 —— 块设备虚拟化(4)
  • 【微服务】java中http调用组件深入实战详解
  • Python 序列
  • 双层BEV启发式具身导航路径规划新范式!Dual-BEV Nav:非结构化户外环境中的机器人导航
  • 群体智能优化算法-䲟鱼优化算法 (Remora Optimization Algorithm, ROA,含Matlab源代码)
  • spring-设计模式
  • CMake 生成静态库、动态库
  • Java集合简单理解
  • Authenticity is the compass that guides you to your true purpose
  • 上海消防全面推行“检查码”,会同相关部门推行“综合查一次”
  • 央行:货币与物价的关系受多重因素影响,提振物价的关键在于扩大有效需求
  • 视频丨雄姿英发!中国仪仗队步入莫斯科红场
  • 数理+AI+工程,上海交大将开首届“笛卡尔班”招生约20名
  • 晋级中部非省会第一城,宜昌凭什么
  • 范志毅跨界归来做青训,探索中国足球人才培养新模式