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

论坛 期权论坛 脚本     
已经匿名di用户   2022-7-2 22:15   3501   0

本节书摘来自异步社区《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修饰结构,结构实例就是常量。——译者注

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP