C语言 ——— 学习并使用条件编译指令

news2024/9/25 23:20:41

目录

何为条件编译指令

常见的条件编译指令

学习条件编译指令

使用条件编译指令

在程序预编译阶段,条件编译指令的代码转换

多分支的条件编译指令


何为条件编译指令

在编译一个程序的时候,如果要将一条语句(一组语句)选择编译或者放弃时,就使用条件编译指令


常见的条件编译指令

#if 常量表达式
    // ……
#endif

学习条件编译指令

#if 后面是一个常量表达式,当常量表达式为真时(非0时)就执行条件编译中的语句,为假时就不执行 


使用条件编译指令

代码演示(为真时):

#include<stdio.h>
int main()
{

#if 1
	printf("hello world\n");
#endif

	return 0;
}

1 为真,所以要执行 #if 内的代码

代码验证(为真时):

代码演示(为假时):

#include<stdio.h>
int main()
{

#if 0
	printf("hello world\n");
#endif

	return 0;
}

0 为假,就不会执行 #if 内的代码

代码验证(为假时):


在程序预编译阶段,条件编译指令的代码转换

代码演示(为真时):

#if 1
	printf("hello world\n");
#endif

#if 后面的常量表达式为真时,在程序预编译阶段就会把 #if 1 和 #endif 删除,只留下要执行的代码,以上代码就会转换为以下代码:

printf("hello world\n");

代码演示(为假时):

#if 0
	printf("hello world\n");
#endif

#if 后面的常量表达式为假时,在程序预编译阶段就会把 #if 1 和 #endif 还有它们所包含的代码全部删除,也就是会将 priintf 函数从程序中删除

结论:

if 等判断语句和 #if 条件编译指令要区分开来,if语句条件为假时只是不执行if内的语句,而 #if 为假时是直接删除 #if 中的语句


多分支的条件编译指令

代码演示:

#define M 0

int main()
{

#if (M == 1)
	printf("hello\n");
#elif (M == 2)
	printf("world\n");
#else
	printf("hello world\n");
#endif

	return 0;
}

多分支结构分析:

和 if 、else if 语句类似,#if 和 #elif 中的常量表达式都为假,所以只会执行 #else 中的表达式,并且不论是但分支还是多分支,在末尾都要加上 #endif

代码验证:

且在程序预编译阶段,也是会将不执行的代码删除,只保留执行的代码

结论:

条件编译指令多用于跨平台性的代码上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2121294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis学习Day2——Redis基础使用

扩展阅读推荐: Redis 教程 | 菜鸟教程 (runoob.com) 黑马程序员Redis入门到实战教程_哔哩哔哩_bilibili 细说 Redis 九种数据类型和应用场景_redis数据类型及应用场景-CSDN博客 一、命令篇 1.1 Redis的命令分类 Redis是典型的K-V型数据库,key标识字符串,而value包含了很…

React Native 0.76版本发布

关于 React Native 的 New Architecture 概念&#xff0c;最早应该是从 2018 年 RN 团队决定重写大量底层实现开始&#xff0c;因为那时候 React Native 面临各种结构问题和性能瓶颈&#xff0c;最终迫使 RN 团队开始进行重构。 而从 React Native 0.68 开始&#xff0c;New A…

在B端管理系统中,复杂或者DIY功能,都依赖哪些编辑器/设计器

一、引言 在当今的商业环境中&#xff0c;B 端管理系统扮演着至关重要的角色。这些系统不仅需要满足企业日常的运营管理需求&#xff0c;还需要具备足够的灵活性和可扩展性&#xff0c;以适应不断变化的业务需求。而在实现复杂或可 DIY 的功能方面&#xff0c;各种编辑器和设计…

C++VTK鼠标框选局部删除三维网格

程序示例精选 CVTK鼠标框选局部删除三维网格 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《CVTK鼠标框选局部删除三维网格》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易…

暗星·Java实战之进阶旅游网

简介 暗星旅游网&#xff0c;是一个分为管理员端和用户端的项目&#xff0c;有权限分离认证&#xff0c;管理员端&#xff08;后台&#xff09;进行旅游产品的维护&#xff0c;主要功能有&#xff1a;管理员管理&#xff0c;角色管理&#xff0c;权限管理&#xff0c;认证和授…

Python怎么发送邮件:基础步骤与详细教程?

Python怎么发送邮件带附件&#xff1f;怎么使用Python发送邮件&#xff1f; 无论是工作中的通知、报告&#xff0c;还是生活中的问候、邀请&#xff0c;电子邮件都扮演着不可或缺的角色。那么&#xff0c;Python怎么发送邮件呢&#xff1f;AokSend将详细介绍Python发送邮件的基…

三、排序算法

文章目录 一、排序算法的介绍二、算法的时间复杂度2.1 基本介绍2.2 时间频度2.3 时间复杂度的表示2.4 算法的平均时间复杂度和最坏时间复杂度 三、算法的空间复杂度四、排序算法4.1 交换排序4.1.1 冒泡排序4.1.2 快速排序 4.2 选择排序4.2.1 简单选择排序4.2.2 堆排序 4.3 插入…

基于Llama 3的最强开源医疗AI模型发布,刷新榜单

转自&#xff1a;火星AIGC 一家名为Saama AI Labs发布了他们基于Llama 3 微调的开源医疗AI大模型OpenBioLLM-Llama3-70B 和 OpenBioLLM-Llama3-8B&#xff0c;刷新抱抱脸上的医疗大模型榜单&#xff0c;并占据榜首。其在生物医学领域的测试性能超越 GPT-4、Gemini、Meditron-7…

浙大数据结构:04-树6 Complete Binary Search Tree

这道题利用了完全二叉树的性质&#xff0c;我也参考了一些代码写的。 &#xff08;自己一开始写了别的方法&#xff0c;但一直过不了最后一个测试点&#xff0c;红温了&#xff09; 机翻&#xff1a; 1、条件准备 用vector存输入的数据&#xff0c;另一个数组存输出的结果&a…

文心一言 VS 讯飞星火 VS chatgpt (344)-- 算法导论23.2 3题

三、对于稀疏图 G ( V &#xff0c; E ) G(V&#xff0c;E) G(V&#xff0c;E)&#xff0c;这里 ∣ E ∣ Θ ( V ) |E|Θ(V) ∣E∣Θ(V)&#xff0c;使用斐波那契堆实现的Prim算法是否比使用二叉堆实现的算法更快&#xff1f;对于稠密图又如何呢&#xff1f; ∣ E ∣ |E| ∣E…

FPGA技术赋能云数据中心:提高性能与效率

随着现代科技的迅猛发展和大数据时代的推动&#xff0c;云数据中心已成为众多企业的核心基础设施。然而&#xff0c;伴随数据处理需求的不断增长&#xff0c;传统硬件架构在性能、功耗和灵活性方面面临诸多挑战。为了解决这些问题&#xff0c;FPGA&#xff08;现场可编程门阵列…

辽宁汇聚公益慈善力量,绿葆网络助力辽宁绿色生态建设,彰显企业大爱

9月5日&#xff0c;于辽宁省沈阳市隆重举行的“中华慈善日”主题宣传活动暨“山海有情 天辽地宁”即开型福利彩票发行、“生态公益林”项目启动仪式上&#xff0c;广州绿葆网络发展有限公司作为受邀企业之一&#xff0c;积极履行社会责任&#xff0c;向辽宁省慈善联合总会捐赠了…

坐牢第三十六天(QT)

自定义QQ界面 wedget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> //qt中信息调试类 #include <QIcon> //图标类 #include <QPushButton>//按钮类 #include <QLabel> //标签类 #include <QMovie> //动图类…

【C++】—— vector 的模拟实现

【C】—— vector 的模拟实现 0 前言1 vector 的成员变量1.1 stl 库中的 vector 成员变量1.2 模拟实现 vector 成员变量 2 迭代器3 size、capacity、empty4 opreator[ ]5 reserve5.1 初版 reserve5.2 _finish 的处理5.3 深拷贝5.4 终版 6 push_back 与 pop_back7 打印函数7.1 初…

打破界限,自闭症寄宿学校带给孩子的改变

在社会的广阔画卷中&#xff0c;有一群特别的孩子&#xff0c;他们以独特的视角感知世界&#xff0c;以非凡的方式表达情感&#xff0c;他们就是自闭症儿童。自闭症&#xff0c;这个听起来略带神秘色彩的词汇&#xff0c;实则承载着无数家庭的期盼与挑战。在这片充满爱的土地上…

【北京迅为】《STM32MP157开发板使用手册》-第十六章 Buildroot制作根文件系统

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

丰巢“闯关”港交所上市

社区中随处可见的智能快递柜&#xff0c;即将捧出一个IPO。 近日&#xff0c;丰巢控股有限公司&#xff08;下称“丰巢控股”或“丰巢”&#xff09;正式向港交所递交了招股书&#xff0c;华泰国际担任其独家保荐人。这将是继顺丰控股、顺丰房托、嘉里物流、顺丰同城之后&…

【Qt笔记】QGroupBox控件详解

目录 引言 一、基本属性 二、常用方法 2.1 构造函数 2.2 设置标题 2.3 设置复选框模式 2.4 是否被选中 2.5 设置对齐方式 2.6 设置扁平化样式 三、信号与槽机制 四、样式定制 五、应用示例 5.1 代码 5.2 代码解析 5.3 实现效果 结语 引言 QGroupBox 是 Qt…

检查iOS多语系文件内容检查iOS多语系文件内容

在iOS中&#xff0c;检查多语言文件&#xff08;如 .strings 文件&#xff09;内容的命令通常使用 plutil 工具。你可以通过终端执行以下命令来检查 .strings 文件的格式和内容&#xff1a; plutil -lint path/to/your/Localizable.strings 这个命令会验证指定的 .strings 文…

C语言13--结构体

结构体基本概念 C语言提供了众多的基本类型&#xff0c;但现实生活中的对象一般都不是单纯的整型、浮点型或字符串&#xff0c;而是这些基本类型的综合体。比如一个学生&#xff0c;典型地应该拥有学号&#xff08;整型&#xff09;、姓名&#xff08;字符串&#xff09;、分数…