首页 > 代码库 > 宏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