(读书笔记)C语言 接口与实现0 --- 简介

简介

本书以例子的形式去描述各个模块,每一章节完整描述一两个接口的实现。

对这些例子的描述,以一种名为 文学程序 的形式给出

文学程序 旨在弱化描述程序内容时语法规则的束缚 ,从而以最适于理解的顺序展示出代码。
文学程序还可以有助于逐点对程序进行描述。什么意思呢?
其实就是在对书中代码元素打上标签,并且这个标签里还可以指示这个代码元素在书中哪一页,这样就方便阅读。
书中也给出了一个例子:

例子:一个double程序的实现
功能:检测输入中相邻的相同单词

定义根代码块来实现double 尖括号 后面带一个恒等于号(因为我输入法打不出来就写个“三”)

//下面根代码块的标签设置为程序的文件名 3表示double.c这个程序中的代码块所在的页码
//includes data prototypes functions分别是include部分 数据 函数原型 函数实现 四个元素
<double.c 3><includes 4>
	<data 4>
	<prototypes 4>
	<functions 3>

有了这一块定义,其他文学程序中要用到double.c代码块就可以直接提取整个程序

....
   <double.c 3>....

他这里<function 3>代表的就是double.c中main函数代码块

<functions 3>int main(int argc, char *argv[]) {
	int i;
	for (i = 1; i < argc; i++) {
		FILE *fp = fopen(argv[i], "r");
	if (fp == NULL) {
		fprintf(stderr, "%s: can't open '%s' (%s)\n",
					argv[0], argv[i], strerror(errno));
		return EXIT_FAILURE;
	} else {
		doubleword(argv[i], fp);
		fclose(fp);
	}
	}
	if (argc == 1) doubleword(NULL, stdin);
	return EXIT_SUCCESS;

}

接下来是include部分

<includes 4>#include <stdio.h>
	#include <stdlib.h>
	#include <errno.h>

<functions 3>还可以包含其他函数代码块 可以追加上去
注意它在 <functions 3>+三 此处的+号 就是用于表示将下面的代码块追加到<functions 3>所表示的main函数末尾

<functions 3>+int getword(FILE *fp, char *buf, int size) {
		int c;
		c = getc(fp);
		<scan forward to a nonspace character or EOF 6>
		<copy the word into buf[0..size-1] 7>
		if (c != EOF)
			ungetc(c, fp);
		return <found a word? 5>;
	}

下面是prototypes部分 该部分和include部分一样 在文学程序中 可以放置在任意部分 但是尽量靠近实现处(对C语言语法规则的让步)

<prototypes 4>
	int getword(FILE *, char *, int);

下面是data部分 代表数据/变量 可以看到这块还有个<scan forword to a nonspace character or EOF 5>三
这一段也被打了标签 只要是打了标签的就可以被抽取使用

<data 4>int linenum;
	<scan forword to a nonspace character or EOF 5>for; c != EOF && isspace(c); c = getc(fp))
		if ( c == '\n' )
			linenum++;

文学程序的基本概念就是这样,总的来说就是让代码更容易阅读一点。
代码放在编辑器中,可以利用IDE的功能做函数跳转,变量跳转等。但是在书上就无法实现。
文学程序就使得这种情况下阅读代码更人性化。首先将不同性质的代码块分类,给予标签设置。同时给出标签所在的页码,读者可以更快的定位过去。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于c语言接口网上的资料是少之又少,所以下面这些文字全是我一个字一个字打印上来的希望大家 能对的起我的付出: 现在的程序员都面临大量的关于应用程序接口(Application Programming Interface,API) 的信息,大多数人都会使用API和程序库,并在其所写的每一个应用程序中实现它们,但是很少人 会创建或发布新的能广泛应用的API,事实上,程序员似乎倾向与循环使用他们自己的东西,而不 愿意查找,能满足他们要求的程序库,这或许是因为写特定应用程序代码要比查找设计好的API容易。 这里我所提到的是一种基于接口与其实现的设计方法,并且通过对24个接口及其实现的描述详细地演示了这种方法,这些接口涉及到计算机领域的很多知识,其中包括数据结构,算法,字符串处理 和并发程序,这些实现并不是简单的玩具----它们是为了在你们所设计的软件代码中使用而设计的。(当然了我会通过阅读量来看是否继续发下去,人要少了我就没有必要浪费时间了) c编程语言对基于接口设计方法的支持是极少的。 而面向对象的语言,如c++,Modula-3,则鼓励将接口实现分离,基于接口的设计独立与任何特定 的语言,但是它要求程序员对像c一样的语言有更多的驾驭能力和更高的警惕性,因为这类语言很容易破坏带有隐含实现信息的接口,反之亦然。 然而一但掌握了基于接口的设计方法,就能够在服务于众多应用程序的通用接口基础上建立应用程序,从而加速开发,在一些c++环境中的基础类库就体现了这种效果。 增加对现有软件的重用---接口实现库,能够减少初始开发成本,同时还能减少维护成本,因为应用程序的更多部分都建立在经过良好测试的通用接口实现上,这里我提到的接口是针对数据结构的,但它并不是数据结构,我重点将放在算法引擎----包装数据结构以供应用程序使用----而不在数据结构算法本身,接口的示例和实现都以literate程序的方式给出,换句话说就是源代码及其解释是按照最适合理解代码的顺序交织出现的。 下面我将我想要给大家讲的内容分一下类: 基础 1,接口实现 2,异常与断言 3,内寸管理 4,进一步内寸管理 数据结构 5,链表 6,表格 7,集合 8,动态数组 9,序列 10,环 11,位向量 字符串 12,原子 13,格式化 14,低级字符串 15,高级字符串 算法 16,扩展精度算法 17,任意精度算法 18,多精度算法 线程 19,线程 建议: 看到这里的朋友我相信对c语言都有了很长时间的学习 如果你还没有搞懂c语言的全部内容,我强烈建议你先别看这里
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值