再读《C语言陷阱与缺陷》2

时隔多年又找出了《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. 最后一点,算术优先级,整理一张表贴在桌子上吧。
   
从高到底依次是 括号,算术,位移,关系,位运算,逻辑运算,?:,赋值,逗号
  
此条目发表在C, 编程, 网摘, 读书分类目录,贴了, , 标签。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。 必填项已用*标注