函数式宏定义小心使用会显著提高代码的执行效率,毕竟省去了分配和释放栈帧、传参、传返回值等一系列工作,因此那些简短并且被频繁调用的函数经常用函数式宏定义来代替实现。
#define MAX(a,b) ((a)>(b)?(a):(b))
k =MAX(i&0x0f, j&0x0f)
这就是一个简单的函数式宏定义。
函数式也经常写成这样:
#define device_init_wakeup(dev,val) \
do { \
device_can_wakeup(dev) =!!(val); \
device_set_wakeup_enable(dev,val); \
} while(0)
这里要特别声明一下:
上面代码中换行需要永达“\”转移字符,这与c代码中明显不同:c代码中可以直接换行。
因为这是c语言特有的特性决定的----------换行在C代码中只不过是一种空白字符,在做语法解析时所有空白字符都已经丢掉了