linus的一个评论。里头关于这个宏的解释,x为变量表达式时,即x由至少一个变量组成时,返回false,x为常量表达式时,返回true
涉及的知识点有
1 x?a:b, if a==NULL then b, if b==NULL then a
2 常量——空指针常量,
常量 0, 1+1,没有变量,在编译时就可以确定值,(如果有变量,则需要运行时确定值)
空指针常量 编译时就可以确定值为0的常量
C语言编译器会将空指针常量,表示为NULL,但是运行时求值(表达式中包含变量)为0就不会做这样的转换
#define ICE_P(x) (sizeof(int) == sizeof(*(1 ? ((void*)((x) * 0l)) : (int*)1)))