IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 36.0、C语言——C语言预处理(4) - 条件编译 -> 正文阅读

[C++知识库]36.0、C语言——C语言预处理(4) - 条件编译

36.0、C语言——C语言预处理(4) - 条件编译

命令行定义:

? ? ? ? 许多 C? 的编译器提供了一种能力,允许在命令行中定义符号;用于启动编译过程;例如:当我们根据同一个源文件要编译出不同的一个程序的不同版本的时候,这个特性就有点用处了;(嘉定某个程序中声明了一个某个长度的数组,如果机器内存有限,我们需要一个很小的数组,但是另外一个机器内存大写,我们需要一个数组能够大写);

实例代码如下所示 ->?

int main() {
	int arr[SZ] = { 0 };
	int i = 0;
	for (i = 0;i < SZ;i++) {
		arr[i] = i;
	}
	for (i = 0; i < SZ; i++) {
		printf("arr[%d] = %d",i,arr[i]);
	}
	return 0;
}

? ? ? ? 1. 上述代码中,数组的长度 SZ 我们并没有定义,但是我们可以在程序预编译之前,用命令行打开这个程序然后命令行去定义一个 SZ 即可【这个操作在我们的 Linux 系统中比较好操作】 ;

? ? ? ? 2. 编译指令,如下所示?->

????????gcc -D SZ = 10 test.c

条件编译 【如果满足条件 -> 包含的代码就参与编译,反之不参与编译】

? ? ? ? 在编译一个程序的时候我们如果要将一条语句(一组语句)编译或者放弃是很方便的;因为在预处理指令中 -> 我们有条件编译指令;

比如说:

? ? ? ? 调试性的代码删除可惜,保留又碍事,所以我们可以选择性的编译;

实例代码,如下所示:

int main() {
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	for (i = 0;i < 10;i++) {
		arr[i] = 0;
#ifdef DEBUG
		printf("%d\n",arr[i]);
#endif
	}
	return 0;
}

for循环语句中 ->

????????#ifdef DEBUG
?? ??? ?????????printf("%d\n",arr[i]);
????????#endif

? ? ? ? 1. 这里表示在预编译阶段查看 -> 如果 DEBUG 这个标识符定义了,就执行里面的代码;如果未定义,那里面的代码就不参与编译,就不执行;

? ? ? ? 2. 上述代码中明显未定义 DEBUG 所以不执行,但是如果想要参与编译且执行,只需要在上面定义 #define DEBUG 即可;

下面给大家再介绍几种 条件预编译指令:

?1. if 条件预编译

? ? #if 常量表达式
????????.........
? ? #ifend

int main() {
#if 1    //这里 1 改成 0 就为假,就不执行下面的 printf 语句
    printf("蓝色海湾");
#ifend
    return 0;
}

?2. 条件预编译——多分支

#if 常量表达式

????????????????//...
#elif 常量表达式
? ? ? ? ? ? ? ? //...
#else?
? ? ? ? ? ? ? ? //...
#endif

实例代码如下所示 ->

int main() {
#if 1==1
	printf("1==1");
#elif 2==1
	printf("2==1");
#else?
	printf(澜色海湾);	
#endif
	return 0;
}

?3. 条件预编译——判断是否被定义

int main() {
#if defined(DEUBG);
	printf("澜色海湾\n");
#endif
//这两种定义的方式不同,但是作用是一样的
#ifdef DEBUG
    printf("澜色海湾\n");
#endif

//相反逻辑定义,当我们未定义的时候执行里面代码,定义的时候不参与编译、不执行,在前面加上感叹号即可
#if !defined(DEUBG);
	printf("澜色海湾\n");
#endif
//这两种定义的方式不同,但是作用是一样的
#ifndef DEBUG
    printf("澜色海湾\n");
#endif
	return 0;
}

? ? ? ? 如上述代码,如果 标识符 DEBUG 在上面定义过了,则会执行里面的 printf() 语句;

4. 条件预编译——嵌套指令

int main() {
#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	
#endif
	return 0;
}

将条件编译指令嵌套的去使用;

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:33:07  更:2022-09-30 00:35:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 7:06:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码