1 00:00:06,692 --> 00:00:09,470 [Powered by Google Translate] תאט HARDISON: בתכנות, ספרייה היא אוסף של 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 כמה קוד שדרוש כדי ליישם printf. 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 ודואר. 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 לקמפל קוד מקור ג. 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 משאבים אלה כוללים פונקציות, משתנה, structs 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 עם זאת, יחד עם גוגל ואת manpages, זה 77 00:03:25,840 --> 00:03:28,060 המקום ללכת אם אתה תוהה איך הקלט / פלט הסטנדרטי 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 יודע על internals של הספרייה ב 87 00:03:54,230 --> 00:03:55,380 כדי להשתמש בו. 88 00:03:55,380 --> 00:03:57,800 זוכר שראית את printf רק קצת לפני? 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 קובץ עם סיומת הקובץ. ג. 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 בשלב זה, את הקבצים. יישום ג אינם 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 פונקציות, משתנה, structs וכולי, בהווה ב 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 ושתיים, ליצור את קוד ההרכבה המתאימה. 124 00:05:37,120 --> 00:05:38,910 תלוי איפה קבצי הכותרת של הספרייה הם 125 00:05:38,910 --> 00:05:42,720 ממוקם, התחביר # כולל משתנה. 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 אז תחביר סוגר הזווית משמש, כמו ב# כוללים 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 ספריות בג להנאתך. 152 00:07:02,150 --> 00:07:05,880 השם שלי הוא נייט Hardison, וזה CS50.