一、 明显常量:#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)