热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

#ifdefvs#ifdefined的差异

目录前言正文一、相同点二、不同点差异一、差异二、结论前言C语法中经常会使用很多预处理命令,当编译器将C代码翻译成汇编的过程中,首先会通过预

 

目录

前言

正文

一、相同点

二、不同点

差异一、

差异二、

结论



前言

C++语法中经常会使用很多预处理命令,当编译器将C++代码翻译成汇编的过程中,首先会通过预处理命令来对代码的内容和编译方式进行调整。预处理指令就是去配置预处理器的各种各样的指令,一般来说,预处理命令都会以“#”开头。比如,我们之前用到的#include就是其中一个预处理命令。除此之外,还有 #pragma,#define,#ifdef,#ifndef,#endif,#if defined等。其中,#ifdef 和 #if defined 就是我们今天要对比的两个指令。

正文

一、相同点

1. #ifdef 和 #if defined 都是C/C++语言特有的预处理命令。

2. #ifdef 和 #if defined 都可以用于宏变量的声明的判断,用来做不同逻辑的处理。

二、不同点


差异一、

#ifdef 只能用于单表达式判断,后者(#if defined)可以有多个逻辑判断。

下面通过两个实例来说明,使用 #ifdef 处理是与非的逻辑代码:

#ifdef  XXX....#else....#endif

使用 #if defined 处理多个 case 或者不同条件的逻辑代码:

#if defined XXX...
#elif defined YYY
...#elif defined ZZZ 
...
#endif

差异二、

#ifdef 只能用于单逻辑判断,也就是单个宏变量是否声明的判断,而后者(#if defined)可以组成复杂的预编译条件。

#if defined (XXX) && defined (YYY)
...#endif

结论

综上所述,当我们想要判断单个宏是否被定义时,使用 #ifdef 和 #if defined 的效果是一样的,但是当我们要判断复杂的条件和情况时,就只能用 #if defined。其实,#ifdef 是 #if defined 的简化版,只是判断单个宏是否被定义时可以用 #ifdef,其它复杂条件和情况可以用 #if defined。尽管, #ifdef 和 #if defined 两个预处理命令有很多不一样的地方,但是在使用过程,它们有一个共同需要注意的地方就是要搭配 #endif 预处理命令一起使用。


作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解。同时也是 CSDN 博客专家(博客之星)、华为云享专家(共创编辑、十佳博主)、51CTO社区编辑、InfoQ 签约作者,欢迎关注我分享更多干货!😄 



推荐阅读
  • PJSIP 编译与开发指南:深入解析 PJSIP 库的应用与优化
    PJSIP 编译与开发指南:深入解析 PJSIP 库的应用与优化 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • Android开发常见问题汇总(含Gradle解决方案)第二篇
    本文继续深入探讨Android开发中常见的问题及其解决方案,特别聚焦于Gradle相关的挑战。通过详细分析和实例演示,帮助开发者高效解决构建过程中的各种难题,提升开发效率和项目稳定性。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • Linux系统中默认安装目录有哪些?Tomcat在Linux下的默认安装路径是什么?
    在Linux系统中,默认安装目录通常包括 `/usr`, `/opt`, 和 `/var` 等。对于Tomcat而言,在Linux下的默认安装路径通常是 `/opt/tomcat` 或者 `/usr/local/tomcat`。具体路径可能会因不同的发行版和配置而有所差异。例如,在Ubuntu Server中,Tomcat的默认安装路径通常是 `/opt/tomcat`。这些目录的选择旨在确保系统的整洁性和可维护性。 ... [详细]
  • 本文提出了一种基于栈结构的高效四则运算表达式求值方法。该方法能够处理包含加、减、乘、除运算符以及十进制整数和小括号的算术表达式。通过定义和实现栈的基本操作,如入栈、出栈和判空等,算法能够准确地解析并计算输入的表达式,最终输出其计算结果。此方法不仅提高了计算效率,还增强了对复杂表达式的处理能力。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 题目要求维护一个数列,并支持两种操作:一是查询操作,语法为QL,用于查询数列末尾L个数中的最大值;二是更新操作,用于修改数列中的某个元素。本文通过ST表(Sparse Table)优化查询效率,确保在O(1)时间内完成查询,同时保持较低的预处理时间复杂度。 ... [详细]
  • 为何Serverless将成为未来十年的主导技术领域?
    为何Serverless将成为未来十年的主导技术领域? ... [详细]
  • 手机49kbps转换比特率256Kpbs{‘corpus_no’:‘7045177033217452815’,‘err_msg’:‘success.’,‘err_no’:0,‘re ... [详细]
author-avatar
欢乐天天快乐一生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有