关于C++中的条件编译

2023-11-10

C++中的条件编译,分为三种形式,分别如下:

1.#ifdef define_name

#…………..

#else

#………….

#endif

这种形式的条件编译,意思大概就是:如果定义了宏define_name,就执行#ifdef define_name到#else之前的代码,否则执行#else到#endif之间的代码,其中#else可以省略。

2.#ifndef define_name

#…………………

#else

#………………..

#endif

含义:如果定义了宏define_name,就执行#else到#endif之间的代码,否则执行#ifndef define_name到#else之间的代码,其中#else也可以省略。

3.#if 表达式

#……….

#else

#……………

#endif

这种形式的宏,跟if和else的用法差不多,如果表达式的值为真,则执行#if 表达式 到#else之间的代码,否则执行#else到#endif之间的代码,其中#else也可以省略。

有时我们可能会不止判断两种条件,可能有多种,类似:if……else if…..else if ……else ,这时我们就完全可以使用#elif来完成我们想要的条件编译

#if 表达式

#………..

#elif 表达式

#………..

#else

#……….

#endif

另外还有一种宏有点特殊,如下:

#if defined(__sgi)
	cout << "__sgi" << endl;
#endif

这小段代码的意思是:如果定义了宏__sgi,条件表达式的值为真,否则为假,然后再执行相应的代码。

其实,上述的这段小代码也可以用#ifdef来实现,看个人喜好罢了。

有时,我们看到别人写的宏,会产生疑问,如下:

#if 0
#   include<new>
#   define __THROW__BAD__ALLOC throw bad_alloc
#elif !defined(__THROW__BAD__ALLOC)
#   include<iostream>
#   define __THROW__BAD__ALLOC cerr<<"out of memory"<<endl;exit(1)
#endif

我们平时用if和else时,如果if条件下面有多个表达式语句,我们要用{}将其括起来,而宏中怎么没呢?刚开始的时候,我也有点小疑惑,后面自己测试了一下,发现宏中的可以不用{}将其条件判定下面的多个表达式语句括起来。

转载于:https://my.oschina.net/u/656608/blog/126485

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于C++中的条件编译 的相关文章

随机推荐

  • c语言数组处理实验报告心得体会,C语言实验报告总结计划数组.doc

    学 生 实 验 报 告 学院 软件与通信工程学院 课程名称 C 语言与程序设计 专业班级 通信 121 姓名 学号 学生实验报告 4 学生姓名 学号 同组人 实验项目 函数 必修 选修 演示性实验 验证性实验 操作性实验 综合性实验 实验地
  • 海量数据存储方案

    参考原文 http blog csdn net xlgen157387 article details 53230138 一 网站应用背景 开发一个网站的应用程序 当用户规模比较小的时候 使用简单的 一台应用服务器 一台数据库服务器 一台文
  • 使用ffmpeg将图片将图片合成视频或者取视频帧作为视频封面

    首先需要下载ffmpeg exe将exe文件放入资金的程序bin目录 然后通过命令行的方式调用ffmpeg是完成想要做的事情 这里举两个最简单的例子 将图片合成视频或者取视频帧作为视频封面 string pathString AppDoma
  • overleaf怎么输入中文_OverLeaf v2 的入门及中文编辑

    Overleaf 以前的WriteLaTex 是一种可在线使用的LaTex文档的书写平台 用户可以不用花费大量的时间和精力在自己的机器上搭建Tex环境 他们可以方便地在线编辑和书写LaTex文档 2017年6月 类似的平台 ShareLaT
  • TB-RK3399pro成砖后Typec无法连接电脑的方法

    TB RK3399pro 即为toybrick的3399pro板 成砖原因 强行刷友善之臂的3399固件 且失败 解决方法 1 断开所有连接 2 用Typec连接电脑 3 按下板子正面的 maskrom 按键 在散热片固定钉旁的一个小按键
  • USB数据接口类型

    为了方便下载数码相机记忆体中的文件 数码相机和PC的连接有多种方式 常见的就是USB接口和IEEE1394火线接口 USB与IEEE1394比较 两者的传输速率不同 过去 很多人都会选用IEEE1394作传输文件用 因为其流量比USB1 1
  • 开环与闭环传递函数波特图的意义

    注 本文默认读者都是控制类专业 先复习一下奈氏曲线和奈氏判据 以及波特图 下面进入今天的主题 开环与闭环传递函数波特图的意义 分为如下三个部分 开环波特图的意义 闭环波特图的意义 为什么大多研究开环波特图 开环与闭环传递函数 一个典型的控制
  • stm32学习—库函数总结

    库函数总结这一章 描述了一般stm32开发的流程 一些常用库函数的设置 一般一开始是使用结构体进行数据的初始化 然后通过使用的途径进行划分 比如常用的数据的输出和输出 这在大部分的外设中都是大量涉及的 再接是辅助我们进行逻辑代码的设计的状态
  • 如何在Java项目中定义并调用自己编写的native方法?

    如何在Java项目中定义并调用C C 编写的native方法 开发工具 编写测试的java代码 编写C 代码 将dll文件链接到java项目中 总结 开发工具 IntelliJ IDEA 2020 用来编写java代码 Visual Stu
  • 关于Markdown表格中如何进行换行、合并单元格

    关于Markdown表格中如何进行换行 合并单元格 1 表格中内容对齐 换行 设置对齐方式 表格内容换行 2 表格中单元格的合并 合并表格行 合并表格列 综合使用 1 表格中内容对齐 换行 常规表格使用 一般我们都会这样用表格如下 姓名 年
  • Kruskal算法求解最小生成树

    最小生成树是一个连通图 什么是连通图 强 连通图详解前面介绍了 图存储结构 本节继续讲解什么是 连通图 前面讲过 图中从一个顶点到达另一顶点 若存在至少一条路径 则称这两个顶点是连通着的 例如图 1 中 虽然 V1 和 V3http c b
  • 空间相关分析(三) 局部莫兰指数的理解与计算

    在上篇中 我们详细地阐述了全局莫兰指数 Global Moran I 的含义以及具体的软件实操方法 今天 就来进一步地说明局部莫兰指数 Local Moran I 的含义与计算 首先说明一下进行局部相关分析的必要性 在全局相关分析中 如果全
  • Java8新特性之时间API

    本篇主要介绍Java 8中新引入的全新的一套时间API Java 8之前的Date类的缺陷 java util包和java sql包中都有一个Date类 区别是util包中的Date类存储的是年月日时分秒 而sql包中的Date只存储年月日
  • 小程序随机生成文字卡片文案海报,带分享保存

    概述 文字随机生成 更换头像 生成卡片 保存卡片 分享卡片 详细 文字随机生成 更换头像 生成卡片 保存卡片 分享卡片 数据是在data js中 随机文案获取 demo直接在微信开发者工具可以运行 index xml 代码
  • python字典中的键是什么_python字典中的键是什么

    字典的键 字典中的值没有任何限制 可以是任意Python对象 即从标准对象到用户自定义对象皆可 但是字典中的键是有类型限制的 1 不允许一个键对应多个值 必须明确一条原则 每个键只能对应一个项 也就是说 一键对应多个值是不允许的 像列表 元
  • 银联商务MISPOS接口开发demo 需要调用POSINF.DLL

    1 接口文档 1 1 无gmc界面接口 dll ocx dll调用 posinf dll 函数名为 int bankall char request char response 其中第一个参数为传入参数 ocx调用 umsocx ocx t
  • Mavenx学习笔记二十二:Maven仓库(从仓库解析依赖的机制)

    Maven仓库 从仓库解析依赖的机制 Maven是根据怎样的规则从仓库解析并使用依赖构件的呢 当本地仓库没有依赖构件的时候 Maven会自动从远程仓库下载 当依赖版本为快照版本的时候 Maven会自动找到最新的的快照 这背后的依赖解析机制可
  • gcc编译提示错误“multiple definition of“

    在做OS实验的过程中 由实验书给出的代码 仍然无法通过编译 查到了很多方法 比如条件编译等等 但经过多次尝试后发现并没有效果 终于在网上找到了一篇能够解决问题的文章 原因是 gcc版本太高 需要降低gcc版本 查看当前gcc版本 gcc v
  • CUDA协作组详解

    CUDA中的协作组 1 协作组简介 Cooperative Groups 是 CUDA 9 中引入的 CUDA 编程模型的扩展 用于组织通信线程组 协作组允许开发人员表达线程通信的粒度 帮助他们表达更丰富 更有效的并行分解 从历史上看 CU
  • 关于C++中的条件编译

    2019独角兽企业重金招聘Python工程师标准 gt gt gt C 中的条件编译 分为三种形式 分别如下 1 ifdef define name else endif 这种形式的条件编译 意思大概就是 如果定义了宏define name