#ifdef vs #if defined 的差异
Posted Data-Mining
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#ifdef vs #if defined 的差异相关的知识,希望对你有一定的参考价值。
目录
前言
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 签约作者,欢迎关注我分享更多干货!😄
以上是关于#ifdef vs #if defined 的差异的主要内容,如果未能解决你的问题,请参考以下文章
ifdef 中的布尔值:“#ifdef A && B”是不是与“#if defined(A) && defined(B)”相同?