《C语言 - define的用法》


一、宏的定义与撤销

需要注意的是:

(1)宏定义应注意添加括号,这样语义会比较清晰。

(2)使用#undef可以撤销宏定义。

(3)引号中的宏定义不会被替换。

(4)宏定义的宏名必须是合法的标识符。

(5)宏定义中单、双引号必须成对出现。

 

二、带有参数的宏定义

需要注意的是:

(1)宏调用时参数的个数要与定义时相同。

 

三、跨行的宏定义,使用反斜杠  分隔

 

 

四、三个特殊符号:#,##,#@

 

 

五、常见的宏定义

 1、防止头文件被重复包含

 

 

 2、得到指定地址上的一个字节值或字值

 

 

3、得到一个field在结构体(struct)中的偏移量

#define OFFSETOF( type, field ) ( (size_t) &(( type *) 0)-> field )

 

4、得到一个结构体中field所占用的字节数 

#define FSIZ( type, field ) sizeof( ((type *) 0)->field )

 

5、得到一个变量的地址(word宽度)

#define B_PTR(var) ( (byte *) (void *) &(var) ) 
#define W_PTR(var) ( (word *) (void *) &(var) )

 

6、将一个字母转换为大写

#define UPCASE(c) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )

 

7、判断字符是不是10进制的数字

#define DECCHK(c) ((c) >= '0' && (c) <= '9')

 

8、判断字符是不是16进的数字

#define HEXCHK(c) (((c) >= '0' && (c) <= '9') ||((c) >= 'A' && (c) <= 'F') ||((c) >= 'a' && (c) <= 'f'))

 

9、防止溢出的一个方法

#define INC_SAT(val) (val = ((val)+1 > (val)) ? (val)+1 : (val))

 

10、返回数组元素的个数 

#define ARR_SIZE(a) ( sizeof((a)) / sizeof((a[0])) )

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM