C程序接口的定义与实现(一)

   一个模块由两部分组成:接口和实现。接口指明模块要做什么,它声明了使用该模块代码可用的标识符、类型和例程;实现指明模块是如何完成其接口声明的目标的。

   在C语言中,接口在头文件声明,头文件的文件扩展名通常为.h。该头文件声明了客户调用程序可以使用的宏、类型、数据结构、变量以及例程。

下面的例子说明了接口中使用的一些约定。

接口的定义:

ContractedBlock.gif ExpandedBlockStart.gif arith.h
 
   
1 extern int Arith_max( int x, int y);
2   extern int Arith_min( int x, int y);
3   extern int Arith_div( int x, int y);
4   extern int Arith_mod( int x, int y);
5   extern int Arith_ceiling( int x, int y);
6   extern int Arith_floor( int x, int y);

   在一个大型程序中,很容易在其他不相关的模块中使用相同的名字,而名字的用途不同。一种避免名字冲突的方法就是使用前缀

比方说模块名:Arith_max。模块名不仅提供了合适的前缀,而且还有助于整理客户调用程序的代码。

C语言内嵌的操作只对正操作数有用。

   标准C认为只要x/y合法,(x/y)*y+x%y=x。当其中一个操作数是负数的时候,这种语义允许整数除法向零或向无穷小取整。

e.g:如果-13/5=-2,那么标准C认为-13%5=-13-(-13/5)*5=-13-(-2)*5=-3;

       但是如果-13/5=-3,那么-13%5=-13-(-3)*5=2

标准库函数div接受两个整数或长整数作为输入,返回商和余数,并存入一个结构中相应的字段quot和rem。

语义已经定义好了:它们总是向零取整,因此div(-13,5).quot=-2

Arith_div和Arith_mod的语义也同样定义好了:它们总是趋近数轴的左侧取整;当操作数符号相同时趋近于0,而当操作数的符号不同时趋近无穷小,因此Arith_div(-13,5)=-3

接口的实现:

ContractedBlock.gif ExpandedBlockStart.gif arith.c
 
   
1 #include " arith.h "
2
3   int Arith_max( int x, int y){
4 return x > y ? x:y;
5
6 }
7
8   int Arith_min( int x, int y){
9
10 return x > y ? y:x;
11 }
12
13   int Arith_div( int x, int y){
14 if (( - 13 / 5 ==- 2 ) && ((x < 0 ) != (y < 0 )) && x % y != 0 )
15 return x / y - 1 ;
16 else
17 return x / y;
18 }
19
20   int Arith_mod( int x, int y){
21
22 return x - y * Atith_div(x,y);
23 }
24
25
26   int Arith_floor( int x, int y){
27
28 return Arith_mod(x,y);
29 }
30
31
32 int Arith_ceiling( int x, int y){
33
34 return Atith_div(x,y) + (x % y != 0 );
35 }


转载于:https://www.cnblogs.com/cpoint/archive/2011/06/03/2072355.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值