zoukankan      html  css  js  c++  java
  • C程序接口的定义与实现(一)

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

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

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

    接口的定义:

    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

    接口的实现:

    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 }


  • 相关阅读:
    springboot 打包部署
    mybatis 插入空值时报错 TypeException
    margin 居中
    node.js 开发命令行工具 发布npm包
    webstorm vue环境设置
    vue数组操作不触发前端重新渲染
    数字英文超过宽度不换行问题
    Jquery checkbox 遍历
    小图标垂直居中
    vue this.$router.push 页面不刷新
  • 原文地址:https://www.cnblogs.com/cpoint/p/2072355.html
Copyright © 2011-2022 走看看