כל מה שאתה צריך לדעת על פונקציות ב- C?



מאמר זה יציג בפניכם מושג פשוט אך עם זאת מאוד בסיסי וחשוב שהוא פונקציות ב- C ולעקוב אחריו באמצעות הדגמה.

מאמר זה יציג בפניכם פשוט אך חשוב מאוד מושג שהוא פונקציות ב- C ובצע אותו בהפגנה. המצביעים הבאים יוסקרו במאמר זה,

פונקציות הן אבני בניין של כל שפת תכנות. במילים פשוטות, פונקציה בקבוצת הצהרות, שלוקחת תשומות, ביצוע משימה ספציפית ואז מחזירה את הפלט.
האידיאולוגיה העומדת מאחורי יצירת הפונקציה היא לאגד קבוצה של הצהרה קשורה יחד אשר מבצעת משימה ספציפית. אז, אתה לא צריך לכתוב את אותו קוד מספר פעמים עבור קבוצה שונה של תשומות. אתה רק צריך להתקשר לפונקציה עבור כניסות שונות, היא תבצע את המשימה שצוינה עבור הקלט הנתון ותחזיר את הפלט. אתה יכול להתקשר לפונקציה כמה פעמים שתרצה. בבלוג זה נלמד כל ניואנס על פונקציות בשפת התכנות C.





נתחיל בשאלה המהותית ביותר.

מהן פונקציות ב- C?

הפונקציות זהות ב- C כמו בכל שפת תכנות אחרת. זוהי קבוצה של קודים המאוחדים יחד לביצוע משימה ספציפית. מערך הקוד שיש לבצע מוגדר בסוגריים מסולסלים, כלומר '{}'.



לפני שנלמד כיצד לכתוב פונקציה ב- C, בואו נבין קודם מה היתרונות.

יתרונות הפונקציות ב- C

היתרונות של פונקציות נפוצים בכל שפות התכנות.
הרעיון העיקרי מאחורי הפונקציה הוא צמצום יתירות הקוד. נניח שיש לך פונקציונליות שיש לבצע מספר פעמים בתוכנית, כך שבמקום לכתוב אותה מספר פעמים, תוכל ליצור פונקציה עבור אותה משימה ולקרוא לה כמה שתרצה. יתרון נסתר נוסף הוא שאם ההיגיון בפונקציונליות שלך ישתנה לאחר מכן, אינך צריך להמשיך ולשנות אותו במספר מקומות. אתה רק צריך לשנות את הקוד במקום אחד (כלומר בפונקציה) והוא יבוא לידי ביטוי במהלך התוכנית.

מודולריות שוב תועלת נוספת. כתיבת פיסת קוד גדולה הכוללת כל דבר והכל, מפחיתה את יכולת הקריאה של הקוד ומקשה על הניהול. ניתן לחלק את הקוד בחלקים לפונקציות בודדות באמצעות פונקציות, וזה פשוט יותר להבנה וקל יותר לניהול.



פונקציה מספקת גם הפשטה, שם אנו יכולים לקרוא לפונקציה ולקבל את הפלט מבלי שנדע על היישום הפנימי.

ממשיכים הלאה עם סוגים של פונקציה C

סוגי פונקציות ב- C

ישנם שני סוגים של פונקציות:
פונקציות הספרייה
פונקציות המוגדרות על ידי המשתמש

פונקציות הספרייה הן פונקציות שכבר הוגדרו בספריית C כגון strcat (), printf (), scanf () וכו 'אתה רק צריך לכלול קבצי כותרת מתאימים כדי להשתמש בפונקציות אלה.
פונקציות המוגדרות על ידי המשתמש הן פונקציות המוגדרות על ידי המשתמש. פונקציות אלה מיועדות לשימוש חוזר בקוד ולחסכון זמן ומקום.

כעת, כשאנו יודעים את היתרונות של יצירת פונקציה בואו נבין כיצד להכריז על פונקציה ב- C.

הצהרת פונקציה והגדרה

הצהרת פונקציה:

תחביר של הצהרת פונקציה:

return_type function_name (data_type arg1, data_type arg2) int add (int x, int y) // הצהרת פונקציה

בהצהרת פונקציה אנו מציינים את שם הפונקציה, מספר פרמטר הקלט, סוגי הנתונים שלהם וסוג ההחזרה של הפונקציה. הצהרת פונקציה מספרת למהדר על רשימת הארגומנטים אליה מצפה הפונקציה עם סוגי הנתונים שלהם וסוג ההחזרה של הפונקציה.

בהצהרת פונקציה, ציון שמות הפרמטר הוא אופציונלי, אך ציון סוגי הנתונים שלהם הוא חובה.

int להוסיף (int, int) // הצהרת פונקציה

הפונקציה שצוינה לעיל תיקח שני פרמטרים שלמים.

הגדרת פונקציה

 תמונה- פונקציות ב- C- אדוריקה
int להוסיף (int, int) // הצהרת פונקציה return_type function_name (פרמטרים) {Body body}

כפי שמוצג בתמונה לעיל הגדרת פונקציה מורכבת משני חלקים כלומר כותרת פונקציה וגוף פונקציה

כותרת פונקציה: כותרת הפונקציה זהה להצהרת פונקציה ללא נקודה-פסיק. כותרת פונקציה מכילה שם פונקציה, פרמטר וסוג החזרה.

  • סוג החזרה: סוג החזרה הוא סוג הנתונים של הערך שיוחזר על ידי הפונקציה. הפונקציה עשויה להחזיר ערך או לא. אם כן, יש לציין את סוג הנתונים של ערך הכוונון מחדש, אחרת סוג ההחזרה צריך להיות מבוטל.

  • שם פונקציה: זהו שם הפונקציה שבאמצעותה אנו יכולים לקרוא לפונקציה מתי & איפה שצריך.

  • פרמטרים: הפרמטרים הם ערכי הקלט אשר יועברו לפונקציה. הוא מספר על סוגי הנתונים של הטיעונים, סדרם ומספר הארגומנטים שיעברו לפונקציה. הפרמטרים הם אופציונליים. ניתן גם לקבל פונקציות ללא פרמטרים.

גוף פונקציה: גוף הפונקציה הוא מערך ההצהרה המבצע משימה ספציפית. זה מגדיר מה הפונקציה עושה.

דוגמא:

int להוסיף (int x, int y) {int sum = x + y return (sum)}

מומלץ להכריז על פונקציה לפני שאנחנו מגדירים אותה ומשתמשים בה. ב- C אנו יכולים להכריז ולהגדיר את הפונקציה באותו מקום.

דוגמא:

# כלול int להוסיף (int, int) // הצהרת פונקציה // הגדרת פונקציה int להוסיף (int x, int y) // כותרת פונקציה {// body function int sum = x + y return (sum)} // פונקציה ראשית int main () {int sum = add (23, 31) printf ('% d', sum) return 0}

כפי שניתן לראות בדוגמה שלעיל אנו קוראים לפונקציה באמצעות משפט int sum = add (23, 31). הערך המוחזר מהפונקציה נשמר במשתנה סכום.

לפני שאנחנו ממשיכים קדימה, יש מושג אחד חשוב נוסף על הפרמנט. ישנם שני סוגים של פרמטרים:

פרמטר בפועל : הפרמטרים האלה שמועברים לפונקציות בזמן שהם קוראים להם ידועים כפרמטרים בפועל. לדוגמא, 23 & 31 בדוגמה שלעיל הם הפרמטרים בפועל.

פרמטר רשמי : הפרמטרים הללו שמתקבלים על ידי הפונקציות מכונים פרמטרים פורמליים. לדוגמא, x & y בדוגמה שלעיל הם הפרמטרים הפורמליים.

בואו נתקדם במהירות ונבין את הדרכים השונות להתקשר לפונקציה ב- C.

קורא פונקציה

ישנן שתי דרכים בהן אנו יכולים לקרוא לפונקציה:

  • התקשר לפי ערך
  • התקשרו בהפניה

התקשר לפי ערך

בשיטת קריאה לפי ערך, הערך של הפרמטר בפועל מועבר כארגומנט לפונקציה. לא ניתן לשנות את ערך הפרמטר בפועל באמצעות הפרמטרים הפורמליים.

בשיטת ה- call be value, כתובת זיכרון שונה מוקצה לפרמטרים רשמיים וממשיים. רק הערך של הפרמטר בפועל מועתק לפרמטר פורמלי.

דוגמא:

#include void Call_By_Value (int num1) {num1 = 42 printf ('n פונקציה פנימית, המספר הוא% d', num1)} int main () {int num = 24 printf ('nFore function, Number is% d', num ) Call_By_Value (num) printf ('n After Function, Number is% dn', num) return 0}

תְפוּקָה

בדוגמה שלעיל, לפני פונקציית קריאה לפי ערך, הערך של מספר הוא 24. ואז, ברגע שאנחנו קוראים לפונקציה ומעבירים את הערך ומשנים אותו בתוך הפונקציה, הוא הופך להיות 42. כאשר אנו חוזרים ושוב מדפיסים את הערך של מספר בפונקציה הראשית, זה הופך ל 24.

התקשרו בהפניה

בשיחה לפי התייחסות, כתובת הזיכרון של הפרמטר בפועל מועברת לפונקציה כארגומנט. כאן, ניתן לשנות את ערך הפרמטר בפועל על ידי הפרמטר הפורמלי.

אותה כתובת זיכרון משמשת גם לפרמטר האמיתי וגם לפורמלי. לכן, אם הערך של הפרמטר הפורמלי משתנה, הוא בא לידי ביטוי גם בפרמטר האמיתי.

ב- C אנו משתמשים במצביעים כדי ליישם שיחה לפי התייחסות. כפי שניתן לראות בדוגמה שלהלן, הפונקציה Call_By_Reference מצפה למצביע למספר שלם.

כעת, משתנה מספר 1 ישמור את כתובת הזיכרון של הפרמטר בפועל. לכן, כדי להדפיס את הערך המאוחסן בכתובת הזיכרון המופנית על ידי מספר 1 עלינו להשתמש במפעיל ההפרשות כלומר *. אז הערך של * num1 הוא 42.

מפעיל הכתובת & משמש לקבלת כתובת של משתנה מכל סוג נתונים. אז בהצהרת קריאת הפונקציה 'Call_By_Reference (& num)', כתובת ה- num מועברת כך שניתן לשנות את num באמצעות הכתובת שלה.

דוגמא

# כלול // הגדרת פונקציה בטל Call_By_Reference (int * num1) {* num1 = 42 printf ('nInside Function, Number is% d', * num1)} // פונקציה ראשית int main () {int num num = 24 printf ( 'n לפני הפונקציה, המספר הוא% d', מספר) Call_By_Reference (& num) printf ('n After function, Number is% dn', num) return 0}

תְפוּקָה

בדוגמה זו, הערך של מספר הוא 24 בתחילה, בתוך הפונקציה הראשית. ברגע שהוא מועבר לפונקציה Call_By_Reference והערך שונה על ידי הפרמטר הפורמלי, הוא שונה גם עבור הפרמטר בפועל. זו הסיבה שכאשר אנו מדפיסים את הערך num לאחר הפונקציה הוא מדפיס 42.

ממשיכים הלאה עם סוגי פונקציות המוגדרות על ידי המשתמש ב- C

סוגי הגדרת המשתמש פוּנקצִיָה ב- ג

ישנם סוגים שונים של פונקציות המוגדרות על ידי המשתמש בהתבסס על סוג ההחזרה והוויכוחים שהועברו.

ממשיכים הלאה ללא העברת טיעונים וללא ערך החזר

1. לא הועברו טיעונים ואין ערך החזר

תחביר:

העבירו בהתייחסות בג'אווה

הצהרת פונקציה:

פונקציה בטל () פונקציית קריאה: פונקציה () הגדרת פונקציה: פונקציה בטל () {הצהרות}

דוגמא

#include void add () void add () {int x = 20 int y = 30 int sum = x + y printf ('sum% d', sum)} int main () {add () return 0}

ממשיך הלאה ללא טיעונים שהועברו אלא ערך החזר

2 לא הועברו טיעונים אלא ערך החזר

תחביר:

הצהרת פונקציה:

פונקציה int () פונקציית call: function () הגדרת פונקציה: int function () {הצהרות מחזירות a}

דוגמא:

#include int add () int add () {int x = 20 int y = 30 int sum = x + y return (sum)} int main () {int sum sum = add () printf ('sum% d', סכום) החזר 0}

ממשיכים עם הוויכוחים שהועברו אך ללא ערך החזר

3 הוויכוח עבר אך ללא ערך החזר

תחביר:

הצהרת פונקציה:

פונקצית ריק (int) פונקציית קריאה: פונקציה (a) הגדרת פונקציה: פונקציה ריק (int a) {הצהרות}

דוגמא:

#include void add (int, int) void add (int x, int y) {int sum = x + y return (sum)} int main () {add (23, 31) return 0}

ממשיכים עם הוויכוח שהועבר וערך החזר

4 הוויכוח עבר וערך החזר

תחביר:

הצהרת פונקציה:

פונקציית int (int) פונקציית קריאה: פונקציה (a) הגדרת פונקציה: int function (int a) {הצהרות מחזירות a}

דוגמא

# כלול int להוסיף (int, int) int להוסיף (int x, int y) {int sum = x + y return (sum)} int main () {int sum = add (23, 31) printf ('% d' , סכום) החזר 0}

עכשיו בואו נסתכל במהירות על פונקציות הספרייה C החשובות על מנת לכתוב תוכנית.

פונקציות ספריה

פונקציות הספרייה הן פונקציות ב- C שהוגדרו מראש ונמצאות כברירת מחדל. אתה רק צריך לכלול את קובץ הכותרת הספציפי בתוכנית ואתה יכול להשתמש בפונקציות שהוגדרו באותו קובץ כותרת. כל קובץ כותרת מספק פונקציונליות מסוג ספציפי. הסיומת של קובץ הכותרת היא .h.

לדוגמא, כדי להשתמש בפונקציות printf / scanf עלינו לכלול את stdio.h בתוכנית שלנו, המספקים פונקציונליות לגבי קלט / פלט סטנדרטיים.

להלן רשימת קבצי הכותרת.

אחדstdio.hקובץ כותרת קלט / פלט רגיל
2הטבעה.הקובץ כותרת קלט / פלט בקונסולה
3מחרוזת.הפונקציות ספרייה הקשורות למחרוזות כגון gets (), puts () וכו '.
4stdlib.hפונקציות ספריה כלליות כגון malloc (), calloc (), exit () וכו '.
5מתמטיקהפונקציות הקשורות לפעולות מתמטיקה כגון sqrt (), pow () וכו '.
6זמןפונקציות הקשורות לזמן
7ctype.hפונקציות לטיפול בתווים
8stdarg.hפונקציות טיעון משתנות
9אות. חפונקציות לטיפול באותות
10setjmp.hפונקציות קפיצה
אחת עשרהlocale.hפונקציות אזוריות
12errno.hפונקציות לטיפול בשגיאות
13טועניםפונקציות אבחון

עכשיו אחרי שעברת את הפונקציות C לעיל היית מבין כל ניואנס של פונקציה וכיצד ליישם אותה בשפת C. אני מקווה שהבלוג הזה אינפורמטיבי וערך מוסף עבורך.

לפיכך הגענו לסוף מאמר זה בנושא 'פונקציות ב- C'. אם ברצונך ללמוד עוד, עיין ב , חברת למידה מקוונת אמינה. קורס ההכשרה וההסמכה של Java J2EE ו- SOA של אדוריקה נועד להכשיר אותך למושגי ליבה מרכזיים ומתקדמים יחד עם מסגרות Java שונות כמו Hibernate & Spring.

יש לך שאלה עבורנו? אנא הזכיר זאת במדור התגובות בבלוג זה ונחזור אליך בהקדם האפשרי.