extern vs global

PINGPONG11

New member
extern vs global

ממה שהבנתי 2 המלים משמשות להצהרה על משתנה גלובלי אז מה ההבדל ביניהן?

כמו כן מה ההבדל בין-
#define pi 3.14
לבין
int const pi=3.14;
?
 

selalerer

New member
כמה הבדלים:

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

רגישות ל-context. ה-define פשוט מחליף טקסט לפני שהקומפיילר רץ. ה-const יכול להיות public או private, יכול להיות בתוך namespace, בתוך function או בתוך class ורק שם יהיה מוכר (כל שלמעשה ניתן להגדיר כמה ב-contextים שונים).
 

פרסאוס

New member
extern הוא משתמש שמוגדר מחוץ לקובץ

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

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

PINGPONG11

New member
רוצה לוודא שהבנתי

אם יש לי קובץ a.c שיש בו משתנה גלובלי num ואני רוצה להשתמש במשתנה הזה בקובץ b.c אז בתוך a.c אני כותבת את ההצהרה
extern int num;

?
תודה לכל העוזרים!!!
 

BravoMan

Active member
הפוך:

אם בקובץ a.c מוגדר משתנה גלובלי כך:

int num;


אז, כדי שפונקציות בקובץ b.c "יראו" אותו, צריך להוסיף הכרזה

extern int num;


בתוך קובץ b.c

בד"כ לא עושים את זה בקובץ c אלא בקובץ h בדומה להכרזה על פונקציות, אבל זה רק לשם נוחות ולא כלל מחייב.
 
למעלה