5.15 《c traps & pitfalls》流水帐

来源:互联网 发布:linux内存管理浅析 编辑:程序博客网 时间:2024/04/30 03:16

准2义性 near-ambiguity


char *s="asdasda";
printf("%s",s);
可以直接printf(s);

机器启动时,硬件调用首地址为0位置的子程序
(*(void(*)())0)();
构造此类表达式简单规则:按照使用的方式来声明。
本书P15 
看解释看的眼老花了。。。

头文件signal.h中,signal函数如何声明
void (*signal(int,void(*)(int)))(int);
P18
介个直接没看懂,等反刍了。。


以上两个都可以用typedef 简单解决,编者说的,偶也没看出哪简单来,就是1行问题用2行解决。。。

看到 P19
37


int a[5][5];
int *p;
若p=a;则非法,书上说a代表一个指向数组的指针,而p是指向整形的指针,两种不同类型,非法。
应该用int (*p)[5];
来定义指针,但写点代码,都运行的过,不知是现在编译器nb了,还是作者太教条了...

44
57
59
65
77
chapt 5
118
122
132
148
152
169
over

chapter 1 词法陷阱

代码的成员方面,符号、变量==
编译器的--大嘴发、贪心法

chatper 2 语法陷阱

代码的成员所组成的句子方面,声明、
运算付、分号、switch、函数调用

chapter 3 语义陷阱

指针、数组、字符串、数据的边界、溢出、main函数的返回值

chapter 4 编译部分的连接

变量的声明、函数的形参实参返回值、外部对象的声明使用与头文件

chapter 5 库函数

chapter 6 预处理器

预处理的意义、宏定义、

chapter 7 可移植性缺陷

ansi c标准的偏离、命名规则、各种类型的分配空间、char的符号、位移的填补和删节规则、内存的null位置、除法的截断、rand生成、大小写转化、内存分配函数*3、

chapter 8 建议

 1.不要说服自己相信皇帝的新装
 2.直截了当的表明自己的意图
 3.考察最简单的特例,如:一组输入数据全为空
 4.使用不对称边界
 5.注意潜伏在暗处的bug
 6.防御性编程

附录A printf.varargs.stdarg
     
貌似后两者即是为了编写printf类函数的工具:跟随调用场合的不同,起参数的数目和类型也不同的函数.
printf的格式类型.修饰符.标志.域宽和精度.

附录B  对作者夫妇的访谈

 他们认为的最重要的3个建议:

 1.避免使用指针.     我干啊!作者不会跟写c指针那老伙计有仇吧!

 2.提倡使用程序库

 3.使用类来表示概念

ps.作者教题时很有意思,不是直接讲对的或者错的,都是这么讲,改错:咱们看这个程序,小程序看起来很简单,但是捏有一点小毛病,我们应该这样改,这样就对了么?虽然改了xx但是..还是不行,咱们再改.抱歉这样还是不行..咱们再改进点....啊很遗憾咱们还是差一点点...最后把程序改好了
作题:都是先写一个大框,再写细节,给人感觉思路很清晰,方向很明确.
总体感觉作者很重过程的呵呵