宏——无非就是定义一个替换的量,好比#define PI 3.,这样的功能,再深一点就是写一个类似函数的定义,好比#define MAX(a,b) ((a) > (b) ? (a) : (b))这样的功能。下面讲解一下具体用法:
一、简单的define定义
#define MAXTIME 1000
一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写
if(i<MAXTIME){
.........}
二、define的“函数定义”
define可以像函数那样接受一些参数,如下
#define max(x,y) (x)>(y)?(x):(y);
#define Add(a,b) a+b;
在一般使用的时候是没有问题的,但是如果遇到如:c * Add(a,b) * d的时候就会出现问题,代数式的本意是a+b然后去和c,d相乘,但是因为使用了define(它只是一个简单的替换),所以式子实际上变成了:
c*a + b*d
另外举一个例子:
#define pin (int*); pin a,b;
三、宏的单行定义(少见用法)
#define A(x) T_x #define B(x) #@x #define C(x) #x
四、define的多行定义
#define可以进行多行定义,这是一个非常经典而且在设备驱动代码中经常要用到的一个方法,格式如下:
#define MACRO(arg1,arg2) do {
\ stmt1; \ stmt2; \ }while(0)
五、定义宏和取消宏定义的方法
定义一个宏使用#define,取消一个宏定义使用#undef
//定义宏 #define (MacroName) (MacroValue) //取消宏 #undef (MacroName)
六、使用宏进行条件编译
格式如下:#ifdef … (#else) … #endif
#ifdef HELLO #define WORLD 1 #else #define WORLD 0 #endi
七、用define来处理头文件被头文件或者源文件包含的情况
由于头文件包含可以嵌套,那么c文件有可能包含多次同一个头文件,就会出现重复定义的问题的,那么可以就通过条件编译开关来避免重复包含,如下:
#ifndef _HELLO_H_ #define _HELLO_H_ ... //文件内容 ... #endif
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202779.html原文链接:https://javaforall.net
