שפת C נוצרה בין סוף שנות ה-60 ל-1973 על ידי דניס ריצ'י במעבדות בל. היא נועדה במקור לכתיבת מערכת ההפעלה UNIX שנייה על מחשבי PDP-11. C התפשטה במהירות והשפיעה על שפות רבות, במיוחד על C++.
לשפה יש תקנים רשמיים מטעם ANSI ו-ISO. התקן הראשון היה ANSI C (C89), ואחריו C99, C11 וגרסאות עדכניות כמו C17/C18 שמכילות בעיקר תיקונים והבהרות.
C היא שפת תכנות פרוצדורלית (פירוש: תוכניות מחולקות לפונקציות), עם טיפוסיות סטטית (כל משתנה מוגדר עם סוג נתונים קבוע). השפה מדגישה יעילות וביצועים, ולכן מאפשרת גישה ישירה לזיכרון. מצד שני, היא "חלשה" מבחינת בטיחות טיפוסים, ויש בה אפשרויות לשגיאות שהמהדר (compiler, התוכנית שמתרגמת קוד לשפת מכונה) לא תמיד יזהה.
ב־C קיימים מצבים שאינם מוגדרים על ידי התקן. דוגמאות: שינוי של מחרוזת-קבועה, חלוקה באפס, גישה מחוץ לגבולות מערך, שימוש במשתנה לא מאותחל ושינוי אותו משתנה יותר מפעם אחת בתוך ביטוי. במצבים כאלה התוצאה לא ידועה והמהדר יכול להחליט איך לקמפל.
משתנה הוא שם שמצביע על אזור בזיכרון. לכל משתנה יש טיפוס: מספר שלם, נקודה צפה ועוד.
יש ארבע קטגוריות של משתנים: מקומיים (קצרי-חיים), מקומיים סטטיים (שומרים ערך לאורך התוכנית), גלובליים וגלובליים סטטיים (ראו ההגדרות כדי לדעת היכן אפשר להשתמש בהם).
טיפוסים בסיסיים כוללים מספרים שלמים (char, short, int, long, long long) וטיפוסי נקודה צפה (float, double, long double).
מצביע (pointer) הוא משתנה שמכיל כתובת בזיכרון. מצביעים משמשים ליצירת מבני נתונים דינמיים ולעבודה ישירה עם זיכרון. לדוגמה: short *x; מגדיר מצביע לערכי short.
בתקן ANSI המקורי לא היה טיפוס בוליאני (true/false). כל מספר שלם שאינו אפס נחשב כאמת. ב־C99 נוסף טיפוס _Bool, ובספריות אפשר להגדיר שם נוח bool.
מערך הוא רצף משתנים מאותו טיפוס המאוחסנים ברצף בזיכרון. האינדקס הראשון מתחיל ב-0. במרבית המקרים שם המערך מתפקד כמצביע לאיבר הראשון.
ב־C אין טיפוס מחרוזת נפרד. מחרוזת היא מערך של char שמסתיים בתו אפס ('\0'), שנקרא null byte. לכן "Hello" הוא למעשה מערך של תווים עם תו סיום.
רשומה או struct היא טיפוס שמאגד שדות מסוגים שונים תחת שם אחד. כך אפשר לאחסן יחד שם, גיל ותכנים אחרים במבנה אחד.
C כוללת מבני בקרה סטנדרטיים: if/else (תנאים), אופרטור טרנרי לכתיבה מקוצרת, ולולאות for, while ו-do-while לחזרה על קטעי קוד.
יש פקודת goto שקופצת לתווית בקוד באותה פונקציה. השימוש בה בדרך כלל לא מומלץ, כי הוא מקשה על קריאת הקוד.
פונקציה היא יחידת קוד שמקבלת פרמטרים ומחזירה ערך. בארגומנטים הערכים מועברים תמיד על פי ערך (by value), כלומר העתק של הנתונים מועבר לפונקציה. פונקציות יכולות גם לשנות את המצב של התוכנית, למשל להדפיס למסך בעזרת printf.
קובץ מקור של C מוגדר כמודול ומהודר לקובץ אובייקט. קבצי כותרת (.h) מכילים הצהרות שעוזרות לקבצים אחרים להשתמש במודולים. לפני ההידור יש קדם-מעבד (pre-processor) שמחליף פקודות כמו #include בתוכן הקבצים המתאימים.
ספריות סטנדרטיות מספקות פונקציות מוכנות להקצאות זיכרון, למחרוזות, לקלט/פלט ולחישובים.
הערות בקוד אינן משפיעות על הריצה. יש שתי צורות: /* ... */ ללחיצות מרובות שורות ו-// לשורת הערה יחידה (נוסף ב־C99).
דוגמה בסיסית שמדפיסה מחרוזת למסך:
#include
int main(void) {
printf("Hello, World!\n");
return 0;
}
שפת C נוצרה בתחילת שנות ה-70 על ידי דניס ריצ'י. היא נבנתה כדי לעזור לכתוב מערכת הפעלה בשם UNIX.
C היא שפת מחשב. שפה זו מסייעת לאנשים לכתוב תוכניות למחשב.
היא מהירה ויעילה. לכן משתמשים בה לכתיבת מערכות הפעלה ולחלקים קריטיים בתוכנות.
משתנה הוא שם שמצביע על מקום בזיכרון. טיפוס הוא סוג הנתונים של המשתנה.
מצביע הוא שם שמכיל כתובת בזיכרון. זה עוזר לקשר בין דברים בתוכנית.
מערך הוא רשימה של ערכים מאותו סוג. האיבר הראשון במערך הוא מספר 0.
מחרוזת היא מערך של אותיות שמסתיים בתו מיוחד שנקרא null (תו סיום).
רשומה (struct) מאחדת מספר שדות שונים תחת שם אחד.
if בודק תנאי ובוחר מה לבצע. else אומר מה לעשות אחרת.
for, while ו-do-while חוזרים על קוד מספר פעמים.
יש גם goto שמקפיצה למקום אחר בקוד, אבל הוא אינו מומלץ.
פונקציה היא קטע קוד שעושה דבר מסוים. אפשר לתת לה קלט והיא תחזיר פלט.
פונקציות יכולות להדפיס למסך בעזרת printf.
הערות מסבירות את הקוד. הן לא משפיעות על המחשב.
יש שתי דרכים לרשום הערה: /* ... */ ו-// לשורה אחת.
תוכנית פשוטה שמדפיסה טקסט:
#include
int main(void) {
printf("Hello, World!\n");
return 0;
}
תגובות גולשים