|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
如果你只是想应付一下操作系统的课程,劝你最好别学,或者说不要指望能用的怎么样。
Min和Max宏:
/*
*min()/max()macrosthatalsodo
*stricttype-checking..Seethe
*"unnecessary"pointercomparison.
*/
#definemin(x,y)({
typeof(x)_x=(x);
typeof(y)_y=(y);
(void)(&_x==&_y);
_x<_y?_x:_y;})
#definemax(x,y)({
typeof(x)_x=(x);
typeof(y)_y=(y);
(void)(&_x==&_y);
_x>_y?_x:_y;})
/*
*..andifyoucanttakethestrict
*types,youcanspecifyoneyourself.
*
*Ornotusemin/maxatall,ofcourse.
*/
#definemin_t(type,x,y)
({type__x=(x);type__y=(y);__x<__y?__x:__y;})
#definemax_t(type,x,y)
({type__x=(x);type__y=(y);__x>__y?__x:__y;})
不是感到跟我们用的有些纷歧样啊:
(void)(&_x==&_y);
(void)(&_x==&_y)这句话自己都实行程序来说完整是一句空话,它的感化在于,自己我们没法做如许的操纵typeof(_x)==typeof(_y),以是存心判别他们2个的地点指针是不是相称,明显是不成能相称,可是假如_x和_y的范例纷歧样,其指针范例也会纷歧样,2个纷歧样的指针范例举行对照操纵,会抛出一个编译告诫。也就是说char*p;int*q;然后p==q;,这个判别由于一个是char*一个是int*,会在编译时发生一个warning.奇妙就奇妙在这里。
因为内核是良多开辟着一同开辟的,个中另有一些其他的完成,就跟我们寻常用的一样:
#definemin(a,b)(((a)<(b))?(a):(b))
试想:
min(++a,++b)==>((++a)<(++b))?(++a):(++b)
是否是就有成绩了,传进的参数被加了两次
</p>
买一本命令参考手册是必要的,遇到不知道怎么用的命令可以随时查询,这要比查man文档快.特别适合英语不好。 |
|