פונקציה גלובלית
פונקציה גלובלית היא פונקציה המוגדרת בקובץ C לפני הפונקציה main() . אפילו הפונקציה main() היא פונקציה גלובלית אבל הפונקציה main() אינה המוקד במאמר זה. בשפה C, פונקציות המוגדרות על ידי מתכנת הן בדרך כלל פונקציות גלובליות והן פשוט מכונות פונקציות.
ניתן לקרוא לפונקציה גלובלית בכל היקף בקובץ שלה. על מנת שפונקציה גלובלית תראה בקובץ אחר, יש להצהיר על אב הטיפוס שלה בקובץ השונה הזה (ראה להלן). כדי למנוע מפונקציה המוגדרת בקובץ אחד להיראות בקובץ אחר, הקדימו את ההגדרה ב- מילה שמורה, סטטית. עם זה, הפונקציה הסטטית תהיה פונקציה גלובלית רק בקובץ משלה ולא תראה בקובץ אחר.
אז ניתן לראות פונקציה גלובלית המוגדרת ב- otherFile.c בכל מקום ב- otherFile.c. כדי שזה ייראה ב-mainFile.c, יש להצהיר על אב הטיפוס שלו ב-mainFile.c (ראה להלן). אין להקדים את ההגדרה שלו ב- otherFile.c ב'סטטי'. כדי למנוע את זה לראות ב-mainFile.c, יש להפוך את ההגדרה שלו ב- otherFile.c ל-static ולהסיר פסיק על ידי הקדמתו למילה, static.
מאמר זה ממחיש פונקציה סטטית בשפת המחשב, C מתחיל במשמעות של אב טיפוס של פונקציה והשימוש בה בתוכנית C של שני קבצים או יותר.
הידור של הקבצים, mainFile.c ו-otherFile.c, יכול להיעשות עם הפקודה הבאה של מסוף Bash:
gcc mainFile. ג קובץ אחר. ג - הטמפ' הזו. exe
temp.exe הוא השם של קובץ ההפעלה היחיד שנוצר.
תוכן המאמר
אב טיפוס C Function
שקול את הגדרת הפונקציה הגלובלית:
לְהַשְׁחִיר * fn1 ( לְהַשְׁחִיר * stri ) {לַחֲזוֹר stri ;
}
אב הטיפוס לפונקציה זו הוא:
לְהַשְׁחִיר * fn1 ( לְהַשְׁחִיר * stri ) ;זוהי חתימת הפונקציה, המסתיימת בנקודה-פסיק.
כעת, תן לתוכן של otherFile.c להיות:
לְהַשְׁחִיר * fn1 ( לְהַשְׁחִיר * stri ) {לַחֲזוֹר stri ;
}
נניח שלקובץ, otherFile.c יש רק את ההגדרה של הפונקציה הגלובלית, fn1(). כעת תן לתוכן הקובץ, mainFile.c, להיות:
#includeלְהַשְׁחִיר * fn1 ( לְהַשְׁחִיר * stri ) ;
int רָאשִׁי ( )
{
לְהַשְׁחִיר * str = fn1 ( 'נראה' ) ;
printf ( '%s \n ' , str ) ;
לַחֲזוֹר 0 ;
}
זה מתחיל עם הכללת הכותרת
לקובץ הראשי הזה אין הגדרה של פונקציה גלובלית כלשהי מלבד פונקציית ברירת המחדל main() . בפונקציה הראשית, ההצהרה הראשונה קוראת לפונקציה fn1() המוגדרת בקובץ השני. קריאה זו לא תהיה יעילה אם אב הטיפוס של fn1() לא הוכרז בקובץ זה, mainFile.c.
אם הקורא קידד את שני הקבצים לעיל, אז הוא יכול לקמפל את התוכנית לקובץ הפעלה אחד עם הפקודה הבאה:
gcc mainFile. ג קובץ אחר. ג - הטמפ' הזו. exeלחיצה על מקש Enter בסוף השורה. הפלט צריך להיות 'נראה'.
פונקציה גלובלית
ניתן לשנות את הקובץ mainFile.c באופן הבא:
#includeלְהַשְׁחִיר * fn1 ( לְהַשְׁחִיר * stri ) ;
לְהַשְׁחִיר * fn ( לְהַשְׁחִיר * רחוב ) {
לַחֲזוֹר רחוב ;
}
int רָאשִׁי ( )
{
לְהַשְׁחִיר * str1 = fn1 ( 'נראה' ) ;
printf ( '%s \n ' , str1 ) ;
לְהַשְׁחִיר * str2 = fn ( 'גלובלי נראה בתיק שלו.' ) ;
printf ( '%s \n ' , str2 ) ;
לַחֲזוֹר 0 ;
}
כעת, יש שתי פונקציות גלובליות בקובץ, mainFile.c. שמות הפונקציות הם fn() ו-main(). dfn() היא פונקציה גלובלית. זה נראה ב-main() פונקציה מקומית, על ידי קריאה. בשפה C, פונקציה גלובלית בהיקף הגלובלי, כגון fn(), מכונה בפשטות פונקציה. כמו כן, הפונקציה הגלובלית, fn1() בקובץ, otherFile.c מכונה בפשטות, כפונקציה.
אם שני הקבצים יקומפילו מחדש לתוך temp.exe, היציאה תהיה:
ראהגלובל נראה בתיק שלו.
הערה: ניתן לגרום להגדרת הפונקציה עבור fn() להיראות גם בקובץ האחר, otherFile.c. כדי להשיג זאת, יש את הצהרת האב-טיפוס שלו ב- otherFile.c, כדלקמן:
לְהַשְׁחִיר * fn ( לְהַשְׁחִיר * רחוב ) ;מסתיים בנקודה-פסיק. פעילות זו, נותרה כתרגיל עבור הקורא.
תפקוד סטטי תקין
מהדיון לעיל, ניתן לראות פונקציה בכל היקף (בכל מקום) בקובץ שלה. ניתן לראות אותו גם בקובץ אחר, עבור אותה תוכנית, אם אב הטיפוס שלו מוצהר שם. על מנת למנוע מההגדרה של הקובץ להיראות בקובץ אחר, הפוך את ההגדרה לסטטית על ידי הקדמתה למילה השמורה, סטטית. גם אם אב הטיפוס שלו מוצהר בקובץ השונה, הוא עדיין לא ייראה בקובץ השונה. קבצי התוכנית אפילו לא יתקדמו. כדי להמחיש זאת, תן לתוכן הקובץ, otherFile.c להיות:
סטָטִי לְהַשְׁחִיר * fn1 ( לְהַשְׁחִיר * stri ) {לַחֲזוֹר stri ;
}
זהו אותו תוכן בקובץ, otherFile.c, כמו קודם, אבל עם המילה השמורה הקודמת, סטטית. התוכן של הקובץ mainFile.c נשאר זהה. אם נעשה ניסיון להדר את קבצי התוכנית עם הפקודה,
gcc mainFile. ג קובץ אחר. ג - הטמפ' הזו. exeהמהדר יוציא הודעת שגיאה, כלומר התוכנית לא עשתה קומפילציה. גם אם הצהרת אב הטיפוס בקובץ השונה קודמת גם היא על ידי סטטי, קבצי התוכנית עדיין לא יקומפלו.
סיכום
הגדרת פונקציה בשפת C, היא פונקציה גלובלית. ניתן לקרוא לפונקציה זו (לראות) בכל היקף בקובץ שלה. כדי שפונקציה זו תראה בקובץ אחר, כמו הקובץ הראשי, יש להקליד את הצהרת האב-טיפוס שלו בקובץ השונה הזה. כדי למנוע מהפונקציה הזו להיראות בקובץ השונה, הפוך את ההגדרה שלה לסטטית על ידי הקדמתה למילה השמורה, static.