最近面试被问到将#define max(a, b)补充完整
。这个知识点自己很久之前也详细了解过,要写出完美的定义会非常复杂。但这个东西我自己实在是用的太少,在面试的时候直接处于懵逼状态,连宏函数都忘记该怎样去写了。所以,趁热打铁,赶紧再记录一下。
//GNUC MIN
#define MIN(A,B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __a : __b; })
#define __NSX_PASTE__(A,B) A##B
#define MIN(A,B) __NSMIN_IMPL__(A,B,__COUNTER__)
#define __NSMIN_IMPL__(A,B,L) ({ __typeof__(A) __NSX_PASTE__(__a,L) = (A); \
__typeof__(B) __NSX_PASTE__(__b,L) = (B); \
(__NSX_PASTE__(__a,L) < __NSX_PASTE__(__b,L)) ? __NSX_PASTE__(__a,L) : __NSX_PASTE__(__b,L); \
})
下面这个链接是我很久之前看过的,讲的很详细了。