1 00:00:06,692 --> 00:00:09,470 [Powered by Google Translate] NATE哈迪森:在编程中,图书馆是一个集 2 00:00:09,470 --> 00:00:11,380 相关预先写好的代码。 3 00:00:11,380 --> 00:00:14,350 图书馆是如何,我们作为程序员,有着共同的和 4 00:00:14,350 --> 00:00:16,930 有用的代码,与不同的节目中,我们相互 5 00:00:16,930 --> 00:00:19,470 写,甚至运行在不同的进程 6 00:00:19,470 --> 00:00:21,380 同时在我们的电脑上。 7 00:00:21,380 --> 00:00:23,000 >> 让我们探讨一下。 8 00:00:23,000 --> 00:00:25,070 其中比较常见的功能,你可能 9 00:00:25,070 --> 00:00:27,500 一直使用的是printf函数。 10 00:00:27,500 --> 00:00:29,820 现在,printf是不是有些神奇的功能, 11 00:00:29,820 --> 00:00:31,670 硬编码到计算机 - 12 00:00:31,670 --> 00:00:34,320 相反,它是C标准库的一部分,这是 13 00:00:34,320 --> 00:00:36,080 附带的功能的集合 14 00:00:36,080 --> 00:00:38,050 C编程语言。 15 00:00:38,050 --> 00:00:40,920 由于printf是内置于计算机中,这意味着, 16 00:00:40,920 --> 00:00:43,520 有一些程序员究竟是谁走了进去,并写下了 17 00:00:43,520 --> 00:00:46,310 printf函数和捆绑它与其余的标准 18 00:00:46,310 --> 00:00:48,880 库,从而使未来的程序员不会有 19 00:00:48,880 --> 00:00:50,310 重复的努力。 20 00:00:50,310 --> 00:00:52,620 我们相信感激,这样的话,因为检查 21 00:00:52,620 --> 00:00:54,710 出它实际上需要多少代码来实现输出。 22 00:00:59,590 --> 00:01:02,860 >> C标准库,其中printf是一个部分, 23 00:01:02,860 --> 00:01:04,480 最重要的工具之一,你 24 00:01:04,480 --> 00:01:06,770 在解决CS50。 25 00:01:06,770 --> 00:01:08,780 除了输入输出库其中 26 00:01:08,780 --> 00:01:11,370 printf的生活,还有一堆其他图书馆, 27 00:01:11,370 --> 00:01:14,230 你可能会使用的CS50的过程。 28 00:01:14,230 --> 00:01:16,730 例如,字符串库的功能, 29 00:01:16,730 --> 00:01:20,960 比较C字符串,其长度,然后将它们连接起来。 30 00:01:20,960 --> 00:01:22,410 和数学库为您提供帮助 31 00:01:22,410 --> 00:01:25,062 常量,如pi和e。 32 00:01:25,062 --> 00:01:27,650 现在,相比其他编程标准库 33 00:01:27,650 --> 00:01:31,190 语言,C标准库是非常小的, 34 00:01:31,190 --> 00:01:34,060 但他们仍然有一个重要的东西。 35 00:01:34,060 --> 00:01:36,370 这并不是说,标准库是 36 00:01:36,370 --> 00:01:39,020 C库,也有许多在那里的 37 00:01:39,020 --> 00:01:42,460 供您使用,包括CS50图书馆的世界, 38 00:01:42,460 --> 00:01:45,150 制图库加密和解密 39 00:01:45,150 --> 00:01:48,000 函数,库函数进行编码和 40 00:01:48,000 --> 00:01:50,970 回放视频,等等。 41 00:01:50,970 --> 00:01:53,190 >> 这给我们带来了一个重要的一边。 42 00:01:53,190 --> 00:01:55,500 工程的基本技能之一是知道的 43 00:01:55,500 --> 00:01:58,090 在你的工具箱中的工具,使您可以使用 44 00:01:58,090 --> 00:01:59,850 他们和避免重新发明轮子,除非 45 00:01:59,850 --> 00:02:01,510 你必须这样做。 46 00:02:01,510 --> 00:02:04,120 作为程序员,库是一个最重要的 47 00:02:04,120 --> 00:02:05,520 我们的工具。 48 00:02:05,520 --> 00:02:08,520 当你发现自己面临着一个任务,这似乎单调乏味或 49 00:02:08,520 --> 00:02:11,940 司空见惯,就像找到一个C字符串的长度, 50 00:02:11,940 --> 00:02:14,020 应该问自己,如果可能的情况下, 51 00:02:14,020 --> 00:02:16,520 已经有人做了同样的事情之前。 52 00:02:16,520 --> 00:02:17,760 有机会,你可以找到一些 53 00:02:17,760 --> 00:02:20,110 帮助在图书馆。 54 00:02:20,110 --> 00:02:23,260 >> 因此,在技术方面,图书馆是一个二进制文件, 55 00:02:23,260 --> 00:02:26,210 已产生的连接在一起的集合 56 00:02:26,210 --> 00:02:28,880 使用工具的目标文件调用,你 57 00:02:28,880 --> 00:02:31,010 猜对了,连接器。 58 00:02:31,010 --> 00:02:33,830 目标文件是o文件,你当你 59 00:02:33,830 --> 00:02:35,860 编译C源代码。 60 00:02:35,860 --> 00:02:38,420 当程序员编写的库,他们通常 61 00:02:38,420 --> 00:02:41,560 他们的C代码分离成两种类型的文件: 62 00:02:41,560 --> 00:02:44,880 头文件和实现文件。 63 00:02:44,880 --> 00:02:49,820 按照惯例,一个头文件。h文件扩展名, 64 00:02:49,820 --> 00:02:51,940 它包含的代码,声明该库的 65 00:02:51,940 --> 00:02:55,120 资源供您使用。 66 00:02:55,120 --> 00:02:58,830 这些资源包括函数,变量,结构, 67 00:02:58,830 --> 00:03:01,980 类型定义,以及等等,并在一起,它们是 68 00:03:01,980 --> 00:03:04,620 通常称为作为接口。 69 00:03:04,620 --> 00:03:07,280 事实上,如果你曾经想知道什么是在图书馆, 70 00:03:07,280 --> 00:03:09,580 头文件的地方去寻找。 71 00:03:09,580 --> 00:03:14,030 >> 例如,你可以拉起来USR /包括/ stdio.h和检查 72 00:03:14,030 --> 00:03:16,210 一切你曾经想知道 73 00:03:16,210 --> 00:03:18,570 标准IO库。 74 00:03:18,570 --> 00:03:20,610 有很多东西在这里,它可以采取一些 75 00:03:20,610 --> 00:03:22,420 涉水通过。 76 00:03:22,420 --> 00:03:25,840 然而,随着谷歌和联机帮助页,这是 77 00:03:25,840 --> 00:03:28,060 地方去,如果你想知道如何使用标准I / O 78 00:03:28,060 --> 00:03:30,460 库函数的工作。 79 00:03:30,460 --> 00:03:33,910 因此,这里要注意的一个关键的事情,不过,就是这个头文件 80 00:03:33,910 --> 00:03:36,740 通常不包括函数定义 - 81 00:03:36,740 --> 00:03:40,020 也就是说,实际的功能实现。 82 00:03:40,020 --> 00:03:42,470 这是一个重要的计算机科学的图示 83 00:03:42,470 --> 00:03:45,700 原则叫做信息隐藏,也被称为在 84 00:03:45,700 --> 00:03:48,960 倍封装。 85 00:03:48,960 --> 00:03:52,630 >> 由于用户或客户端的一个库,则不需要 86 00:03:52,630 --> 00:03:54,230 了解库中的内部 87 00:03:54,230 --> 00:03:55,380 为了使用它。 88 00:03:55,380 --> 00:03:57,800 还记得看到输出只是有点? 89 00:03:57,800 --> 00:04:00,275 如果你实际的代码之前见过吗? 90 00:04:00,275 --> 00:04:02,535 嗯,我认为即使你没有,你可能 91 00:04:02,535 --> 00:04:05,090 用的printf吨的次数。 92 00:04:05,090 --> 00:04:08,110 你必须知道的是函数的声明存在 93 00:04:08,110 --> 00:04:10,940 在stdio.h头文件。 94 00:04:10,940 --> 00:04:14,010 总之,良好的信息隐藏的利益是你 95 00:04:14,010 --> 00:04:16,820 你写的程序是绝缘的任何变化 96 00:04:16,820 --> 00:04:20,209 的库函数的实现代码。 97 00:04:20,209 --> 00:04:22,880 如果执行的printf的变化,你不必 98 00:04:22,880 --> 00:04:26,310 去改变所有你的程序中使用printf。 99 00:04:26,310 --> 00:04:28,450 >> 那么,实施去了? 100 00:04:28,450 --> 00:04:31,020 好了,再次,按照惯例,实施“在 101 00:04:31,020 --> 00:04:34,310 。c文件扩展名的文件。 102 00:04:34,310 --> 00:04:36,820 通常情况下,头文件和实现文件齐头并进 103 00:04:36,820 --> 00:04:39,380 在手,所以,如果你已经声明了一堆新的字符串 104 00:04:39,380 --> 00:04:42,950 在mystring.h的功能,然后你可以定义所有的 105 00:04:42,950 --> 00:04:46,960 这些功能在mystring。 106 00:04:46,960 --> 00:04:49,230 那么接下来的头文件和实现文件,然后 107 00:04:49,230 --> 00:04:52,230 编译,创建目标文件,然后链接 108 00:04:52,230 --> 00:04:55,360 在一起,产生的二进制库文件。 109 00:04:55,360 --> 00:04:58,520 库编写者将附带的二进制文件,以及 110 00:04:58,520 --> 00:05:00,720 程序员谁想要使用的头文件 111 00:05:00,720 --> 00:05:02,280 该库。 112 00:05:02,280 --> 00:05:04,640 在这一点上,C语言实现文件 113 00:05:04,640 --> 00:05:07,840 需要,除了从头开始,所以重新编译该库 114 00:05:07,840 --> 00:05:10,270 他们经常离开了。 115 00:05:10,270 --> 00:05:13,670 >> 要使用C库,你必须做两件事情。 116 00:05:13,670 --> 00:05:16,890 首先,你必须包括库的头文件和 117 00:05:16,890 --> 00:05:18,700 你想使用源代码文件 118 00:05:18,700 --> 00:05:20,530 库中的代码。 119 00:05:20,530 --> 00:05:23,200 这告诉编译器,所有的声明 120 00:05:23,200 --> 00:05:26,890 函数,变量,结构,等等,目前在 121 00:05:26,890 --> 00:05:30,510 头文件,以便编译器之一,确保 122 00:05:30,510 --> 00:05:33,280 您正在使用图书馆的资源以适当的方式, 123 00:05:33,280 --> 00:05:37,120 2,生成相应的汇编代码。 124 00:05:37,120 --> 00:05:38,910 根据库的头文件 125 00:05:38,910 --> 00:05:42,720 位于的#include语法各不相同。 126 00:05:42,720 --> 00:05:44,880 如果头文件位于系统的 127 00:05:44,880 --> 00:05:46,690 默认情况下包括目录 - 128 00:05:46,690 --> 00:05:48,780 通常情况下,usr/include-- 129 00:05:48,780 --> 00:05:52,200 然后尖括号语法时,如在#include 130 00:05:52,200 --> 00:05:53,450 。 131 00:05:57,440 --> 00:05:59,540 然而,如果头文件都位于相同的 132 00:05:59,540 --> 00:06:02,960 目录作为自己的代码,双引号的语法是 133 00:06:02,960 --> 00:06:04,870 使用#“包括”mylib.h。 134 00:06:08,630 --> 00:06:11,220 >> 你所要做的第二件事是链接的二进制 135 00:06:11,220 --> 00:06:13,760 库文件时,编译你的代码。 136 00:06:13,760 --> 00:06:15,810 这是一个超级的重要步骤。 137 00:06:15,810 --> 00:06:17,540 还记得我们前面的讨论中,关于如何头 138 00:06:17,540 --> 00:06:20,200 文件不包含实现代码吗? 139 00:06:20,200 --> 00:06:22,200 如果你忘了这一步,你会得到错误信息 140 00:06:22,200 --> 00:06:24,990 在你的代码中未定义的符号引用。 141 00:06:24,990 --> 00:06:29,580 要解决此问题,请使用-l标志,后面紧跟 142 00:06:29,580 --> 00:06:32,320 没有空间的库名称。 143 00:06:32,320 --> 00:06:35,410 在许多系统,包括家电,C标准 144 00:06:35,410 --> 00:06:38,350 库将自动为您联系。 145 00:06:38,350 --> 00:06:41,700 然而,有时被捆绑的数学库分别 146 00:06:41,700 --> 00:06:44,600 可能需要链接时使用-lm。 147 00:06:44,600 --> 00:06:47,760 在设备上,我们为你照顾,我们也 148 00:06:47,760 --> 00:06:52,170 链接CS50图书馆,lcs50的。 149 00:06:52,170 --> 00:06:54,540 当你运行时,在设备上,你可以看到这一切。 150 00:06:57,620 --> 00:06:59,130 >> 现在你应该有你需要使用的知识 151 00:06:59,130 --> 00:07:02,150 C.库中尽情探索。 152 00:07:02,150 --> 00:07:05,880 我的名字是Nate哈迪森,这是CS50。