首页 > 代码库 > 宏define
宏define
Q:写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个
A: #define MIN(A,B) ((A) <= (B) ?(A):(B))
这个测试为这些目的而设:
1).标识#define在宏中应用的基本知识.直到嵌入(inline)操作符变为标准C 的一部分.是方便产生嵌入代码的唯一方法.对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法.
2).三重条件操作符的知识.这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码.了解这个用法很重要的.
3).懂得在宏中小心地把参数用括号括起来
4).我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?
least = MIN(*p++, b);
Q:求最大值
A: #define MAX( x, y ) ( ((x) > (y)) ? (x) : (y) )
Q:将一个字母转换为大写
A: #define UPCASE( c ) ( ((c) >= ‘a‘ && (c) <= ‘z‘) ? ((c) - 0x20) : (c) );
Q:判断字符是不是10/16进值的数字
A: #define DECCHK( c ) ((c) >= ‘0‘ && (c) <= ‘9‘)
A: #define HEXCHK( c ) ( ((c) >= ‘0‘ && (c) <= ‘9‘) ||\
((c) >= ‘A‘ && (c) <= ‘F‘) ||\
((c) >= ‘a‘ && (c) <= ‘f‘) )
Q:返回数组元素的个数
A: #define ARR_SIZE( a ) ( sizeof( (a) ) / sizeof( (a[0]) ) )
#define
命令#define定义了一个标识符及一个串。在源程序中每次遇到该标识符时,均以定义的串代换它。ANSI标准将标识符定义为宏名,将替换过程称为宏替换。命令的一般形式为:
#define identifier string
注意:
? 该语句没有分号。在标识符和串之间可以有任意个空格,串一旦开始,仅由一新行结束
? 宏名定义后,即可成为其它宏名定义中的一部分
? 宏替换仅仅是以文本串代替宏标识符,前提是宏标识符必须独立的识别出来,否则不进行替换
例如: #define XYZ
this is a test,使用宏printf("XYZ");//该段不打印"this is a test"而打印"XYZ".因为预编译器识别出的是"XYZ"
? 如果串长于一行,可以在该行末尾用一反斜杠‘ \‘续行
宏define