练习

1.(*2)在你的系统里找到保存标准库头文件的位置。列出它们的名字。是否有其他非标准头文件和它们保存在一起?那些非标准头文件也能用 <> 记法#include吗?

2.(*2)非标准的“基础”库头文件保存在哪里?

3.(*2.5)写一个程序,它读入一个源文件,并写出其中用#include包含的所有文件的名字。采用缩排形式显示出被包含的文件里用#include包含的文件。用某些实际的源程序做这个程序的试验(以便取得对被包含的信息的认识)。

4.(*3)修改上面练习中的程序,对于每个被包含的文件,打印出其中注释的行数,非注释的行数,非注释的以空白分隔的单词数。

5.(*2.5)一个外部包含保护符是一种结构,它在文件的外部检查被它保护的文件,并在一次编译中只包含这个文件一次。请设计出这样一种结构,找出一种测试它的方法,将它与第9.3.3节所描述的包含保护符相比较,讨论其优点和缺点。外部保护符在你的系统上有什么显著的运行优势吗?

6.(*3)在你的系统中如何得到动态连接?对于动态连接的代码有什么限制?要使代码成为动态连接的,对于它有什么特别的要求吗?

7.(*3)打开并读入100个各包含1 500个字符的文件。打开并读入一个包含150 000个字符的文件。提示:参见21.5.1节的例子。在执行性能方面有什么差异吗?在你的系统上能够同时打开的最大文件数是多少?针对#include文件的使用考虑这些问题。

8.(*2)修改计算器程序,使它可以从main()或者其他函数里通过一个简单的函数调用而激活。

9.(*2)对于使用error()而不是异常的计算器版本(8.2.2节),画出其“模块依赖关系图”(9.3.2节)。