[Powered by Google Translate] תאט HARDISON: בתכנות, ספרייה היא אוסף של קוד נכתב מראש בנושא. ספריות הן איך אנחנו, כמתכנתים, מניות רגילות ו קוד מועיל אחד עם השני, עם תוכניות השונות לכתוב, ואפילו עם את התהליכים השונים שפועלים ב באותו הזמן במחשבים שלנו. הבה נחקור קצת. אחד מתפקידיו היותר הנפוצים שיש לך כנראה כבר משתמש הוא פונקצית printf. עכשיו, printf היא לא איזה פונקצית קסם שהייתה בקידוד קשיח למחשב - ולא, זה חלק מספריות C הסטנדרטיות, שהם אוסף של פונקציות שמגיע עם שפת תכנות C. מאז printf אינו בנוי למחשב, זה אומר ש יש איזה מתכנת שבאמת נכנס וכתב פונקצית printf וצרר אותו עם שאר הסטנדרטי ספריות כך שהמתכנתים עתידיים לא יצטרכו לשכפל את המאמץ. ואנחנו בטוחים שמודים שזה מקרה, כי תבדקו כמה קוד שדרוש כדי ליישם printf. ספריות C הסטנדרטיות, אשר printf היא חלק, הן אחד הכלים החשובים ביותר שאתה יש בהתמודדות CS50. בנוסף לספריית קלט הפלט בי חיי printf, יש חבורה של ספריות אחרות ש אתה בטח תשתמש במהלך CS50. לדוגמה, בספרייה במחרוזת יש פונקציות ל להשוות מחרוזות C, תקבל אורכם, ולשרשר אותם. וספריית המתמטיקה נותנת לך מועילה קבועים, כמו pi ודואר. עכשיו, בהשוואה לספריות הסטנדרטיות של תכנות אחר שפות, הספריות הסטנדרטיות C הן ממש קטנות, אבל עדיין יש להם כמות משמעותית של חומר. וזה לא אומר שהספריות הסטנדרטיות הן C ספריות בלבד, יש הרבה יותר שם בחוץ ב עולם כדי שתוכל להשתמש בו, כולל ספריית CS50, ספריות קרטוגרפיה עם הצפנה ופענוח פונקציות, ספריות עם פונקציות כדי לקודד ו לנגן וידאו, וכן הלאה. זה מביא אותנו לצד חשוב. אחת המיומנויות החיוניות של הנדסה היא לדעת כלים זמינים בארגז הכלים שלך, כך שאתה יכול להשתמש ולהימנע מלהמציא את הגלגל מחדש, אלא אם כן יש לך לעשות זאת. כמתכנתים, ספריות הן אחד החשוב ביותר כלים שיש לנו. כאשר אתה מוצא את עצמך מול משימה שנראית מייגע או דבר שבשגרה, כמו למצוא את אורך מחרוזת C, אתה צריך לשאול את עצמך אם זה יכול להיות במקרה זה מישהו כבר עשה את אותו הדבר בעבר. רוב הסיכויים הם שאתה יכול למצוא לעזור במסגרת ספרייה. אז במונחים טכניים, ספרייה היא קובץ בינארי ש הופק על ידי הקישור יחד אוסף של קבצי אובייקט באמצעות כלי שנקראים, אתה נחשתי נכון, המקשר. קבצי אובייקט הם אלה. קבצי o שאתה מקבל כשאתה לקמפל קוד מקור ג. כאשר מתכנתים לכתוב ספריות, הם בדרך כלל להפריד קוד C לשני סוגים של קבצים: קבצי יישום קבצי כותרת. קובץ כותרת של כנס הוא נתון. סיומת קובץ h, והוא מכיל קוד שמצהיר ספרייה של משאבים זמינים עבורך לשימוש. משאבים אלה כוללים פונקציות, משתנה, structs הגדרות של סוגים, וכן הלאה, ויחד, הם המכונה גם בממשק. למעשה, אם אתה אי פעם תוהה מה יש בספרייה, את קבצי הכותרת הם המקום לחפש. לדוגמה, אתה יכול למשוך את usr / כולל / stdio.h ולבדוק את כל מה שאי פעם רצית לדעת על ספריית io הסטנדרטית. יש הרבה דברים בפה, וזה יכול לקחת קצת זמן לדשדש. עם זאת, יחד עם גוגל ואת manpages, זה המקום ללכת אם אתה תוהה איך הקלט / פלט הסטנדרטי פונקציות עבודת ספרייה. אז דבר חשוב אחד לציין כאן, אם כי, הוא שקבצי הכותרת בדרך כלל אינו כולל הגדרות של פונקציות - כלומר, מימושי התפקוד בפועל. זוהי המחשה של מדעי מחשב חשובים עיקרון שנקרא הסתרת מידע, המכונה גם ב פי אנקפסולציה. כמשתמש או הלקוח של ספרייה, אתה לא צריך יודע על internals של הספרייה ב כדי להשתמש בו. זוכר שראית את printf רק קצת לפני? יצא לך לראות את הקוד בפועל לפני? ובכן, אני מניח שאין לך, למרות שאתה יכול השתמש בטונות של printf פעמים. כל מה שאתה צריך לדעת היה נוכח הצהרת הפונקציה בקובץ כותרת stdio.h. בכל מקרה, היתרון של הסתרת מידע טובה הוא שאתה ואת התוכניות שאתה כותב מבודדות מכל שינוי ב הקוד של יישום פונקציות ספרייה. אם היישום של שינויי printf, אין לך ללכת ולשנות את כל התוכניות שלך שמשתמשות בprintf. אז איפה יישום ללכת? ובכן, שוב, למוסכמות, ליישום בהולך קובץ עם סיומת הקובץ. ג. בדרך כלל, קבצי יישום קבצי הכותרת הולכים יד ביד, כך שאם אתה כבר הצהרת חבורה של מחרוזת חדשה פונקציות בmystring.h, ואז תוכלנה להגדיר את כל הפונקציות האלה בmystring. ג. אז את קבצי הכותרת ויישומם אז מלוקט, יצירת קבצי אובייקט אז המקושרים יחד כדי לייצר קובץ הספרייה בינארי. סופר ספרייה אז לשלוח את הקובץ בינארי יחד עם קבצי הכותרת למתכנתים שרוצים להשתמש הספרייה. בשלב זה, את הקבצים. יישום ג אינם צורך, פרט להדר את הספרייה מהתחלה, ולכן תוך כדי כך הם נשארים בחוץ. כדי להשתמש בספריית C, אתה צריך לעשות שני דברים. ראשית, עליך # כולל קבצי הכותרת של הספרייה ואת קובץ קוד המקור שבו ברצונך להשתמש הקוד של הספרייה. זה מודיע למהדר של כל הצהרותיו של פונקציות, משתנה, structs וכולי, בהווה ב קבצי כותרת כך שהמהדר יכול אחת, להבטיח כי אתה משתמש במשאבים של הספרייה בדרך הנכונה, ושתיים, ליצור את קוד ההרכבה המתאימה. תלוי איפה קבצי הכותרת של הספרייה הם ממוקם, התחביר # כולל משתנה. אם כותרת הקבצים נמצאים במערכת של ברירת מחדל לכלול במדריך - בדרך כלל, usr/include-- אז תחביר סוגר הזווית משמש, כמו ב# כוללים . עם זאת, אם קבצי הכותרת נמצאים באותו ספרייה כמו קוד משלך, את תחביר הציטוט הכפול היא משמש, כמו ב# לכלול "mylib.h". הדבר השני שאתה צריך לעשות הוא לקשר בינארי ספריית קובץ בעת לקמפל את הקוד שלך. זהו צעד סופר חשוב. זכור את הדיון הקודם שלנו על איך כותרת קבצים אינם מכילים קוד יישום? אם שכחת את הצעד הזה, תקבל על טעויות סמלים לא מוגדרים הפניה בקוד שלך. כדי לפתור את זה, השתמש בדגל-l ומייד אחריו ללא רווח בשם הספרייה. במערכות רבות, כולל המכשיר, C הרגיל ספריות מקושרות באופן אוטומטי עבורך. עם זאת, ספריית המתמטיקה היא לעתים מעורבבת בנפרד ואולי צריכים להיות מקושר עם-lm. על המכשיר, שנטפל בזה בשבילך, ויש לנו גם לקשר עם ספריית CS50-lcs50. אתה יכול לראות את כל זה במכשיר בעת הפעלה עושה. עכשיו אתה צריך את הידע שאתה צריך להשתמש ספריות בג להנאתך. השם שלי הוא נייט Hardison, וזה CS50.