Linux 内核阅读宏定义#define的使用总结
程序员文章站
2024-03-22 10:11:16
...
面试中定义一个比较两个数大小的宏:
简单的宏定义:
#define MAX(x,y) x > y ? x : y
此种写法当x,y是表达式时会出问题:所以基本改进如下:
#define MAX(x,y) (x) > (y) ? (x) : (y)
#define MAX(x,y) ((x) > (y) ? (x) : (y)) //此种方法最好
上面几种写法是我们在面试中常写的几种宏定义。
接下来我们学习一下更加高级的宏定义吧,接下来我们看一下内核里面的宏定义来学习吧!
#define MAX(x,y)({ \
int _x = x; \
int _y = y; \
_x > _y ? _x : _y; \
})
在上面这个宏中,我们定义的两个临时变量数据类型是int型,只能比较两个整型的数据。那对于其它类型的数据,就需要重新再定义一个宏了,这样太麻烦了!我们可以基于上面的宏继续修改,让它可以支持任意类型的数据比较大小:
#define MAX(type,x,y)({ \
type _x = x; \
type _y = y; \
_x > _y ? _x : _y; \
})
当我们不想定义type类型的时候,那么我们又将如何进行比较呢!当传入的参数类型不一致时,我们又将如何处理呢!
我们可以看下学习下下面这个宏定义:
#define max(x, y) ({ \
typeof(x) _x = (x); \
typeof(y) _y = (y); \
(void) (&_x == &_y);\
_x > _y ? _x : _y; })
上一篇: html5 规范中新增的api 博客分类: javascript
下一篇: 项目要怎么说