宏定义函数
· 以下标准是基于 GNU C
宏定义函数和普通函数
· 对与程序调用普通函数时,需要将当前程序运行的状态保存在栈中,然后 PC 指针跳转到调用的函数执行的代码段,这样提高了程序的可维护性,但调用函数需要额外的开销,但是节省了代码段的空间
· 宏定义函数是以空间换取时间的策略,程序不需要跳转到对应的函数去执行,而是在预编译时,就把宏定义函数替换到源代码中去,这样增大了代码段空间,但是节省了调用函数的时间(因为在 C 中没有像 C++ 一样的内联函数)
宏定义函数的实现
· 宏定义函数一般适用于代码段小且需要大量调用的函数
· 在 GNU C 中拓展了 typeof 关键字,让你可以在宏定义中更方便的定义
#define MIN(x,y) ({
typeof(x) _x = (x); \
typeof(y) _y = (y); \
(void)(&_x = &_y); \
_x < _y ? _x : _y; \
})
· 宏定义函数需要用 ({}) 把内容括起来
· typeof 的作用是取获取到的变量的数据类型
· \ 放斜杠后面的空格要删干净,不然会报警告
· ({ }) 的最后一句是该宏定义函数的返回值