#if defined和#if !defined(c语言的宏定义)

2023-11-01

因为对于一个大程序而言,我们可能要定义很多常量( 不管是放在源文件还是头文件 ),那么我们有时考虑定义某个常量时,我们就必须返回检查原来此常量是否定义,但这样做很麻烦.if defined宏正是为这种情况提供了解决方案.举个例子,如下: 
#define .... 
#define .... 
    .... 
    .... 
#define a 100 
    .... 
此时,我们要检查a是否定义(假设我们已经记不着这点了),或者我们要给a一个不同的值,就加入如下句子 
#if defined a 
#undef a 
#define a 200 
#endif 
上述语句检验a是否被定义,如果被定义,则用#undef语句解除定义,并重新定义a为200 

同样,检验a是否定义: 
#ifndef a    
//如果a没有被定义 
#define a 100 
#endif 

以上所用的宏中:#undef为解除定义,#ifndef是if not defined的缩写,即如果没有定义。 

这就是#if defined 的唯一作用!
1) 
#if defined XXX_XXX 
#endif 
是条件编译,是根据你是否定义了XXX_XXX这个宏,而使用不同的代码。 

一般.h文件里最外层的 
#if !defined XXX_XXX 
#define XXX_XXX 
#endif 
是为了防止这个.h头文件被重复include。 

2) 
#error XXXX 
是用来产生编译时错误信息XXXX的,一般用在预处理过程中; 
例子: 
#if !defined(__cplusplus) 
#error C++ compiler required. 
#endif 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

#if defined和#if !defined(c语言的宏定义) 的相关文章

  • STM32 ST-LINK Utility介绍、下载、安装、使用方法

    STM32 ST LINK Utility介绍 下载 安装 使用方法 原文如下 xff1a https blog csdn net ybhuangfugui article details 52597133
  • 使用ST-Link Utility去除STM32芯片读写保护

    转载学习自 xff1a http blog csdn net hxiaohai article details 78546431 locationNum 61 10 amp fps 61 1 问题 xff1a 使用ISP J Link ST
  • PAUSE: command not found

    system pause 相当于从程序里调用 pause 命令 继而暂停 必须添加 stdlib h 或 cstdlib 头文件 但只适合DOS或Windows 不合适合Linux 这就是出现 sh PAUSE command not fo
  • #if defined和#if !defined(c语言的宏定义)

    因为对于一个大程序而言 我们可能要定义很多常量 不管是放在源文件还是头文件 那么我们有时考虑定义某个常量时 我们就必须返回检查原来此常量是否定义 但这样做很麻烦 if defined宏正是为这种情况提供了解决方案 举个例子 如下 defin
  • Qt:FTP 与 QFtp 实现文件传输(C++: ftplib)

    目录 C 与 FTP 1 1 简介 1 2 工作原理 1 2 1 独特优势 1 2 2 基本模型 1 3 用户与传输 1 3 1 用户分类 1 3 2 传输方式 1 3 3 传输模式 1 4 控制命令 实现方式 2 1 QFtp 2 2 Q
  • Unity3D开发小贴士(十四)JsonUtility

    Json是现在非常常用的数据格式 因为 Net的版本问题 所有没有很方便的方法可以直接在Unity里面使用C 官方的Json库 于是Unity3D自己提供了自己的一套Json工具 JsonUtility 参考下面的示例 using Unit
  • 用户级线程和系统级线程

    在多线程操作系统中 各个系统的实现方式并不相同 在有的系统中实现了用户级线程 有的系统中实现了内核级线程 1 内核级线程 1 线程的创建 撤销和切换等 都需要内核直接实现 即内核了解每一个作为可调度实体的线程 2 这些线程可以在全系统内进行
  • DUF – 适用于 Linux、BSD 和 macOS 的跨平台磁盘使用/免费实用程序

    随着数据的指数级增长 管理存储和分析磁盘使用情况已成为系统管理员和日常计算机用户的一项基本任务 了解磁盘空间的利用方式有助于您优化系统并就存储分配做出明智的决策 DUF 即磁盘使用 空闲实用程序 是一款功能强大的跨平台工具 旨在帮助您做到这
  • 在android编程中使用实用程序类

    我对实用程序类有一点了解 但对需求略有疑问 如果我在我的应用程序中使用实用程序类而不是在我的主活动中使用该类 我是否必须创建该类的对象 或者我可以直接在我的主活动中导入该类吗 如果我没有表达清楚的话 我很抱歉 简而言之 我想清楚的是 基本上
  • 实用程序类..好还是坏?

    我一直在读到 通过在代码中使用静态类 单例来创建依赖项是一种不好的形式 并且会产生问题 紧密耦合和单元测试 我遇到的情况是 我有一组没有与之关联的状态的 url 解析方法 并且仅使用该方法的输入参数执行操作 我相信你对这种方法很熟悉 在过去
  • 使用 unix 实用程序删除连续的重复行

    这表面上听起来很简单 但实际上要复杂一些 我想使用 unix 实用程序删除连续的重复项 保留原始内容 但是 我还想保留在原始内容之后不立即出现的其他重复内容 例如 如果我们有以下几行 O B O B C D T V O B 我希望输出是 O
  • Java:静态类?

    我有一门充满实用功能的课程 实例化它的实例没有语义意义 但我仍然想调用它的方法 处理这个问题的最佳方法是什么 静态类 抽象的 标记为 Final 的类上的私有构造函数和静态方法
  • 有没有一种方法可以使用宏来检测是否包含标准标头?

    我想做一个相当于boost swap在我的环境中 可以或不可以包含标准标头 取决于项目许可和其他内容 我想让部分代码受到警卫检测器的保护 让我们考虑一个编译单元 项目特定的 前述的潜力包括 include
  • wget 中的递归下载如何工作?

    wget 用于镜像站点 但我想知道该实用程序如何下载该域的所有 URL wget r www xyz com wget如何下载域xyz的所有URL 它是否像爬虫一样访问索引页面并解析它并提取链接 简短回答 通常 是的 Wget 会抓取所有
  • Typescript 仅从重载中选择特定方法(传递给Parameters

    背景 所以我在从重载的函数获取特定参数时遇到问题 例如 someLib d ts type Component
  • 通过jquery获取对象数组的索引

    我有以下数组 var array id aa description some description id bb description some more description id cc description a lot of d
  • List::Util - 减少 - 长度 - 编码 - 问题

    为什么第一个reduce 示例得到错误的结果 test txt BE bb bbbbbbbbbbbbbbb aaaaaa test pl usr bin env perl use warnings use 5 012 use open en
  • 如何以编程方式操作 Windows 桌面图标位置?

    几年前 我天真地尝试编写一个小应用程序来保存我战术性放置的桌面图标 因为当某些事件重置它们时 我厌倦了将它们拖回原来的位置 在花费了太多时间未能找到一种方法来查询 更不用说保存和重置 我的图标的桌面位置后 我放弃了 有人知道 Windows
  • 为什么我不应该有一个单一的整体实用程序库?

    我们有一些通用库 C 但我想这不是特定于平台或语言的 我们称它们为 A B 和 C 库 A 引用了 B 和 C 库 B 引用了第三方 DLL 库 C 是独立的 三个独立项目背后的想法是 每个库都有不同的功能 但随着时间的推移 库 A 或多或
  • 用于编译/反编译二进制数据文件的通用实用程序或库?

    我有各种二进制文件格式 我需要将其转储为某种文本格式 编辑然后重新编译 可能是二进制格式的稍微不同的版本 当然 我可以用 C C 编写一堆实用程序代码来完成这种事情 并且可能利用一个库来处理文本方面的事情 XML 或 JSON 或其他 但这

随机推荐

  • HTML入门-------form表单

    一 表单概述 表单是可以把用户输入的数据传输到服务器端的HTML元素 然后在后台处理表单传输过来的数据 用来完成与用户之间的各种交互动作 在网页上由可输入的表单控件 比如文本输入框 密码输入框 单选按钮 多选按钮等 表单在网页中主要负责收集
  • 数据库优化的几个阶段

    引言 大家在面试的时候 是否遭遇过 面试官询问 你们是如何进行数据库优化的 那这个问题应该怎么答呢 其实写这个题材的原因是我这几天看到各公众号转的一篇数据库调优的知识 不上链接了 我就稍微翻了几下 上面动不动就来说要对数据库进行水平拆分 我
  • 【Jlink烧录自动化】一台电脑连接 多个Jlink 用 J-flash批处理程序烧写多个单片机(生产批量烧录)

    项目描述 最近一些设备需要进行预生产 小批量生产 虽然是小批量但是数量也是很多 单靠人力烧录设备比较耗费时间 因此需要做一个烧录治具批量烧录 软件与物料准备 软件 由于设备的MCU是arm cortex M4内核 使用的是Jlink烧录因此
  • Spring Cloud Eureka 服务发现速度慢配置优化总结

    文章目录 一 Eureka server 服务端缓存问题 1 1 服务端缓存 1 2 客户端从服务端获取实例数据的过程 1 3 优化 二 客户端 Eureka client 缓存导致 2 1 Eureka客户端和服务端交互缓存 2 2 Ri
  • GAN基本概念

    GAN Generative Adversarial Nets 生成对抗网络 GAN 主要包括了两个部分 即生成器 generator 与判别器 discriminator 生成器主要用来学习真实图像分布从而让自身生成的图像更加真实 以骗过
  • Thread.currentThread().interrupt() 用法详解

    文章目录 基本用法 结合示例 如果不使用怎么发生什么 基本用法 Thread currentThread interrupt 是 Java 中用于中断当前线程的方法 它有以下几个特点和用法 调用 Thread currentThread i
  • 【Maxon App无法登录(红移渲染器无法开启)】

    Maxon 无法登录 红移渲染器无法开启 情况 方法一 方法二 方法三 结尾 情况 打开Maxon APP为以下界面 或打开redshift渲染器卡在以下界面 代表Maxon客户端无法登录 方法一 以win10为例 服务没有正常启动 在桌面
  • 学习abp-1-ContosoUniversity Abp版

    1 去abp官网下载模板工程 https aspnetboilerplate com 项目名称为ContosoAbp 这里使用的是net core 3 x 2 x版本在编辑用户时 会报错 打开下载的解决方案 等待nuget还原包 2 数据库
  • git rm -rf 删除文件恢复

    记有一次手贱 git rm rf 删除文件后的恢复过程 git rm rf logs 意外删除logs目录 恢复步骤 git reset HEAD logs git checkout logs 此方法会从版本库直接恢复文件 会删除修改记录
  • Bootstrap的行、列布局设计(网络系统设计)

    目录 00 基础知识 01 等宽列布局 02 指定某一列的宽度 03 根据内容自动改变列的宽度 04 五种预定义列宽度 col col sm col md col lg col xl 05 不同视口宽度按不同的分列方案划分 06 删除列内容
  • RTSP协议学习

    文章目录 RTSP协议学习 单播 组播 广播 单播 Unicast 和组播 Multicast 广播 Broadcast 学习思维导图一览 RTSP协议学习 工作原理 RTSP Real Time Streaming Protocol 的工
  • 51单片机主频12Mhz写一个延时1ms的延时函数

    我们可以使用基于51单片机的软件定时器来实现1ms的延时 具体代码如下 delayms unsigned int ms 延时函数 unsigned int i while ms i 12000 12MHz的主频 12000为1ms whil
  • 关于安卓毛玻璃实现(三)recyclerview静态毛玻璃

    背景 毛玻璃 开发中又爱又恨的一个话题 玩法层出不穷 有动态的 也有静态的 有的是实时模糊 有些只需要模糊一次 本文的毛玻璃实现 就是静态毛玻璃 开发环境 win 10 as 4 jdk 1 8 代码 源码在文末 最终效果 思路 看到上图
  • Angular5.x入门教程1

    首先请自行安装好Node和npm cmd测试下图 则表示安装成功 1 安装 angular5 x脚手架CLI 一系列工具命令和库 方便我们创建angualr项目 在cmd在下全局安装 安装完毕 接再来 选择一个需要生成项目的目录 cmd到该
  • 使用get-pip.py 安装python2 的pip

    pip V pip 21 2 3 from Library Python 3 8 site packages pip python 3 8 pip3 V pip 21 2 3 from Library Python 3 8 site pac
  • 我的世界服务器发消息有符号,我的世界彩色字体符号

    在我的世界中很多玩家都想知道彩色字体怎么输入 在游戏中彩色字体需要配合相应的符号才能输入 下面小编就来告诉大家我的世界中彩色字体怎么打 正确答案 1 在游戏中 只要在输入文字后输入 颜色值 即可让文字发生变色 小贴士 找不到该符号的玩家可以
  • Mixing digital audio(混音数字音频),声音混合算法

    Mixing digital audio 大家可以看这篇文章Mixing digital audio
  • itk打包问题

    代码 只装了itk pyinstaller usr bin env python coding utf 8 import itk ImageType itk Image itk UL 3 image ImageType New print
  • Supervised Hashing for Image Retrieval via Image Represention Learning-笔记1

    摘要 Background In the existing supervised hashing methods for images an input image is usually encoded by a vector of han
  • #if defined和#if !defined(c语言的宏定义)

    因为对于一个大程序而言 我们可能要定义很多常量 不管是放在源文件还是头文件 那么我们有时考虑定义某个常量时 我们就必须返回检查原来此常量是否定义 但这样做很麻烦 if defined宏正是为这种情况提供了解决方案 举个例子 如下 defin