宏定义相关

最近面试被问到将#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); \
                              })

下面这个链接是我很久之前看过的,讲的很详细了。

宏定义的黑魔法 - 宏菜鸟起飞手册

你可能感兴趣的:(宏定义相关)