我来补充一下@guo-zhao-liang 的答案吧。这个问题就他一个是说技术的。
事情是这样的,有人写了一个宏,用来在C语言里检测一个表达式是否是integer constant expressions,邮件里简写ICE。
#define ICE_P(x) (sizeof(int) == sizeof(*(1 ? ((void*)((x) * 0l)) : (int*)1)))
就这一行,Linus是这么夸他的:
That is either genius, or a seriously diseased mind.
要么是个天才,要么是脑子病得不轻。
你们家夸人。。。。真的挺别致的。。。。
然后Linus认真的给大家解释了这个宏是怎么工作的
当x
是ICE的时候,比如1
或者1+1
的时候
((void*)((x) * 0l))
会在编译时确定为NULL
于是变成
sizeof(*(1 ? NULL : (int*)1)))
C语言要求对于三元操作符(code ? a : b )
,如果a或者b有一个是NULL,则结果的类型是另一个的类型
因此变成sizeof(*(int*)1)
,也就是sizeof(int)
。等号成立
当x
不是ICE的时候,会变成
sizeof(*(1 ? ((void*)0) : (int*)1)))
三元操作符的条件是1,所以总是等于第一个的值
sizeof(*(void *)0)
而在gcc下,这个值是1,一定不会等于sizeof(int)
然后Linus说,这个宏问题其实很多,首先sizeof(void)
不是C语言标准,其次这玩意正常人看不懂
最后Linus又非常委婉的夸奖了一下这一行代码
I'm in awe of your truly marvelously disgusting hack. That is truly a
work of art.
你这个hack(技巧?)超乎寻常的恶心,我对此表示敬畏。这真的是艺术品了。
我对Linus夸人的技巧也想表示表示敬畏