《C语言接口与实现:创建可重用软件的技术》一2.7 习题

简介:

本节书摘来自异步社区《C语言接口与实现:创建可重用软件的技术》一书中的第2章,第2.7节,作者 傅道坤,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.7 习题

2.1 原本可使用预处理器宏和条件编译指令如#if,来指定Arith_div和Arith_mod中如何处理除法的舍入操作。解释为什么对-13/5 == -2的显式测试是实现上述判断的更好的方法。

2.2 对于Arith_div和Arith_mod来说,仅当用于编译arith.c的编译器执行算术操作的方式与Arith_div和Arith_mod被调用时的目标机器相同时,这两个函数中所用的-13/5 == -2测试才是有效的。但这个条件可能会不成立,例如,如果arith.c由运行在机器X上交叉编译器编译,针对机器Y生成代码。不使用条件编译指令,请改正arith.c,使得交叉编译生成的代码也保证可以工作。

2.3 如同本书中所有的ADT,Stack接口也省略了下述规格说明:“将外部的Stack_T传递给本接口中任何例程,都是未检查的运行时错误”。外部的Stack_T,意味着不是由Stack_new产生的Stack_T。修正stack.c,使其可以在某些情况下检查到这种错误。例如,一种方法是向Stack_T结构添加一个字段,对于Stack_new返回的Stack_T,该字段包含一个特有的位模式。

2.4 通常有可能会检测到某些无效指针。例如,如果一个非空指针指定的地址在客户程序地址空间之外,那么该指针就是无效的,而且指针通常会受到对齐约束,例如,在某些系统上,指向double的指针,指向的地址必定是8的倍数。请设计一个特定于系统的宏isBadPtr(p),在p为无效指针时为1,这样assert(ptr)之类的断言都可以替换为类似assert(!isBadPtr(ptr))的断言。

2.5 对栈来说,有许多可行的接口。为Stack接口设计并实现一些备选方案。例如,一种方案是再为Stack_new增加一个参数,用于指定栈的最大容量。

[1] C语言中数据指针和函数指针的位宽应该是相同的,但C++中的成员函数指针可能有不同。——译者注

[2] const修饰指针,指针就是常量;const修饰结构,结构实例就是常量。——译者注

相关文章
|
1月前
|
C语言
【C语言】循环结构程序设计(第二部分 -- 习题讲解)
【C语言】循环结构程序设计(第二部分 -- 习题讲解)
|
1月前
|
编译器 C语言
C语言习题----不同版本的差别
C语言习题----不同版本的差别
12 0
|
1月前
|
C语言
C语言习题
C语言习题
14 0
|
8天前
|
存储 自然语言处理 编译器
振南技术干货集:振南当年入门C语言和单片机的那些事儿(3)
振南技术干货集:振南当年入门C语言和单片机的那些事儿(3)
|
2天前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
|
2天前
|
C语言
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
|
2天前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符 (20分)
|
2天前
|
C语言
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
|
2天前
|
C语言
(浙大版《C语言程序设计(第3版)》 习题6-5 使用函数验证哥德巴赫猜想 (20分)
(浙大版《C语言程序设计(第3版)》 习题6-5 使用函数验证哥德巴赫猜想 (20分)
|
8天前
|
算法 C语言 芯片
振南技术干货集:振南当年入门C语言和单片机的那些事儿(1)
振南技术干货集:振南当年入门C语言和单片机的那些事儿(1)