代码改变世界

近期杂

2011-06-13 19:57  justvi  阅读(161)  评论(0编辑  收藏  举报
”c语言声明有时会带来严重的问题“ 《tcpl》p122 "c is sometimes castigated for the syntax of its declarations, particulaly ones that involve pointers to functions" "正是由于在组合类型方面的笨拙行为,c被显著且无必要地复杂化了“ c声明晦涩之因: 1.c前身BCPL无类型模型之概念 2.声明形式与使用形式尽可能相同 3.无法以习惯方式从左到右阅读 结构参数传递: “在调用函数时,参数按从右到左方式压入堆栈“,这种说法过于简单。参数传递时首先尽可能地放入到寄存器中,int型一般传入到寄存器中,而包含一个int型的结构可能传入到堆栈 联合(与结构) 同:结构一样 不同:内存布局上,所有成员都从偏移地址零开始存储。对于互斥即不可能同时出现的情况,用联合来表示 枚举之优点:#define定义的名字在预编译时被替换,在编译时是不存在的,而枚举名字一直在调试器中可见,可以在调试时使用 声明的优先级:从高到低 声明中被括号括起来的部分 后缀操作符:()函数,[]数组 前缀:‘*’指针 typedef和宏文本替换之间的区别: 1.宏类型名可以使用其他的类型说明符再进行扩展,而typedef定义的类型名不能 2.在连续几个变量的声明中,用typedef定义的类型保证声明的所有变量均为同一类型,而宏类型名无法保证 ---------- char *strcpy(char *pto, char *pfrom) { char *p = pto; while ( (*pto = *pfrom) != '\0') ; return p; } ---------- if (c = '\t') => 本为比较,却成赋值,始终为真 => if ('\t' == c) --------- 注意fputc的function prototype: int fputc(int c, FILE *stream),在调用fputc时,注意参数顺序 --------- strength prototype:声明函数原型时将返回值类型,参数类型及顺序写清楚: void memchr(const void *ptr, int ch, int size)就不如以下的好 void memchr(const void *ptr, unsigned int ch, size_t size) ----- *** Enable all optional compiler warnings *** If have unit tests, use them *** Use assertions to validate function arguments