美文网首页
#ifdef #if defined #ifndef和#if !

#ifdef #if defined #ifndef和#if !

作者: 棉花糖7 | 来源:发表于2020-06-07 17:56 被阅读0次

首先,让我们先从头文件开始,在很多头文件里,我们会看到这样的语句

  #ifndef _MYHEADFILE_H

  #define _MYHEADFILE_H

  // .......语句......

  #endif // _MYHEADFILE_H

  为了避免同一个文件被include多次,我们常使用 #ifndef 进行判断,如果没有包含

  _MYHEADFILE_H , 则使用#define 来定义一个宏 _MYHEADFILE_H , #endif 与#ifndef

  首尾呼应,表示结束。


        #ifdef

  #ifndef

  #if defined

  #if !defined

#ifdef只能判断单一的宏是否定义,而#if defined()可以组成复杂的判别条件;

对于单一的宏AAA来说,#ifdef AAA和#if defined(AAA)是完全相同的。

而要组成复杂的判别条件,用#if defined()就灵活方便了,比如:#if defined(AAA) && (BBB >= 10)

如果改用#ifdef则没法表示条件BBB>=10了。


宏定义   #define        

        指令都是以#开始的,我们来看一下简单的宏定义(对象式宏)

  #define  标准符  替换列表

  #define  PI  3.1415926

  可以对类型重命名,如: #define  BOOL  int

  宏可以带参数,也是常说的宏函数

  #define 标识符(x1,x2...) 替换列表

  特别注意的是标识符和(之间不能有空格,圆括号是必须的。

  我们来看一下例子:

        #define MAX(x,y) ((x)>(y)?(x):(y))

  #define IS_EVEN(n) ((n)%2==0)


格式:

#if ...

#elif...

#elif...

#endif...

举例:

#if define(IA32)

  #define CPU_FILE “ia32.h”

#elif defined(IA64)

  #deifine CPU_FILE “ia64.h”

#elif defined(AMD64)

  #define CPU_FILE “amd64.h”

#endif


还可以取消已经定义的宏:用undef
#if defined VALUE              // 检验VALUE是否被定义 ,如果被定义

  #undef VALUE            // 解除语句定义

  #define VALUE 1000            //  重新定义VALUE 为1000

#endif

转载

相关文章

网友评论

      本文标题:#ifdef #if defined #ifndef和#if !

      本文链接:https://www.haomeiwen.com/subject/rfdightx.html