首页 > 技术文章 > #define和他的小伙伴们

blogwww 2018-08-14 14:11 原文

一、 明显常量:#define

1.1 基本定义

指令的位置:  

1)老版本:指令从最左侧开始,且指令与#之间不能有空格老版本要求之前不能有空格。ANSI:#前可有空格或制表符,,#与指令之间也可以有空格。

2)指令可以出现在源文件的任何地方,指令的作用域从定义出现的位置开始至文件结尾。

组成结构:

由三部分组成:第一部分为#define自身;第二部分为缩略语(宏);第三部分为替换列表(主体)

1.2常见用法:

 

二、#undef

#undef 指令取消定义一个给定的#define.

假设有如下定义:

#define LINI 34

则指令:
#undef LINI

会取消定义。现在可以重新定义LINI。如果开始没有定义LINI,取消LINI的定义也是合法的。想使用一个特定名字,不能确定是否使用过,则可以取消名字的定义。

三、条件编译

3.1   #ifde、#else、#endif

#ifdef MAVIS
    #include "horse.h" //如果已经用#define定义了MAVIS,则执行这里的命令
    #define  STABLE 5
#else
     #include “cow.h” //如果没有用#define定义MAVIS,则执行这里的命令
    #define STABLE 15
#endif

 3.2  #ifndef

   类似于#ifdef指令,#ifndef指令可以与#else、#endif指令一起使用。#ifndef判断后面的标志符是否为未定义的,#ifndef的反义词是#ifdef。#ifndef通常用来定义此前未定义的常量。

#ifndef SIZE
    #define SIZE 100
#endif

 3.3 #if和#elif

  #if指令特别像C中的if :#if 后面跟常量整数表达式。如果表达式为非零值,则表达式为真。在该表达式中可以使用C的关系运算符和逻辑运算符。

例如:

#if SYS == 1
    #include "ibmpc.h"
#elif SYS == 2
    #include"vax.h"
#elif SYS == 3
    #include"mac,h"
#else
    #include"general.h"
#endif

   define 是一个预处理器运算符。如果defined 的参数已经用#define 定义过,那么define 返回 1 ;否则返回0。这种方法的好处在于它可以和#elif一起使用。重写上面的示例。

#if define (IBMPC)
    #include "ibmpc.h"
#elif define(VAX)
    #include "vax.h"
#elif define(MAC)
    #include "mac.h"
#else
    #include "general.h"
#endif

 (内容源于:C Primer Plus)

推荐阅读