70- typedef和#define在很多情况下是类似的,不过记住typedef是由编译器解释的,通常来说比#define更强。使用typedef的两个主要原因是:
1) 用来提高程序的可移植性。对任何依赖于具体运行环境的变量定义,如果用typedef来做,移植的时候只需要更改typedef就可以了。标准库中的ptrdiff_t,size_t类型都是这样的例子。
2) 用来给程序提供更好的注释性文档。例如Treeptr类型显然比struct Treenode *类型更直观。
71- 对一个联合体来说,标准只保证其实际大小足够容纳其中最大的一个成员,至于这个大小的具体数值,是依赖于具体实现的。使用一个结构体的时候,放进去的是什么,取出的必须也是什么,如果放入的取出的不是同一个成员,最终的结果也是依赖于具体实现的。
72- 如果对一个联合体做初始化,注意只能按照其中第一个成员的类型提供初值。
73- bitfield,即位域,是一个单一的word中相邻的若干bit集合。其中的word是一个依具体的实现而有不同定义的概念,一般是2-4个字节。位域中可以有匿名域,这样的匿名域通常是用来填充空白的。
74- putchar和printf可以交替出现,标准保证输出的结果和对这些函数的调用有同样的顺序。
75- 使用变长参数表的时候要包含stdarg.h。注意变长参数表使用结束后,程序返回之前一定要调用va_end做清理工作。
76- ferror是标准库中的一个函数用来判断某个文件指针FILE *fp上面是否发生了错误。
77- 调用fgets(char *, int max, FILE *),最多读入max-1个字符,并且是'\0'结尾的。
阅读(785) | 评论(0) | 转发(0) |