时隔多年又找出了《C语言陷阱与缺陷》,以前的叙述可以看这里,这里和这里,这次重新认真看到了P21,把差不多的内容总结一下。
1. 牢记"所有赋值语句的优先级低于逻辑语句"
例如 if(x=y!=0)
2. 010(八进制) 10(十进制) 特别是当你想简单的对齐一些数字的时候,明白前面加0不是这么简单的
3. 'yes' in Broland c++/LCC v5.5 = 'y'
'yes' in Visual c++/GCC v2.95 = 's'
4. 关于 (*(void(*)())0)() 的比较out了,后面还有更给力的
void (* signal(int, void(*)(int))) (int)
看清楚他的前提是你要明白 (*fp)() 和 *fp(), 前者fp是一个函数指针,后者fp是一个返回指针的函数。
更进一步的,语法允许 (*fp)() 简写为 fp()
所以上面的语句声明的是一个传入int, 返回void的函数,其指针是由 *signal(int, void(*)(int)) 提供,
signal是一个传入 int和 一个指向传入int,传出void函数的指针 ,返回 一个指针的函数。
5. 最后一点,算术优先级,整理一张表贴在桌子上吧。
从高到底依次是 括号,算术,位移,关系,位运算,逻辑运算,?:,赋值,逗号