近期杂
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
作者:justvi
出处:http://www.cnblogs.com/justvi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章正文中给出原文连接,否则保留追究法律责任的权利
出处:http://www.cnblogs.com/justvi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章正文中给出原文连接,否则保留追究法律责任的权利