עבור לתוכן

העברת מצביע לקובץ - C

Featured Replies

פורסם

איך ניתן להגדיר מצביע לקובץ שהוגדר בפונק' ספציפית בקובץ מסויים (שאינו main) כך שיהיה אפשר להשתמש באותו מצביע בפונק' אחרת שבקובץ אחר (שגם אינו main)?

מה עלי להגדיר בכל קובץ ואיפה, ועל מה עלי לשמור ?

תודה !!

פורסם

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

פורסם
  • מחבר

ברור, אבל לא לזה התכוונתי.

התכוונתי שאם הגדרתי בתוך פונק' מצביע לקובץ, אבל אותה פונק' לא מחזירה את המצביע אלא רק יוצרת אותו, ואני מעוניין להשתמש בו בפונק' אחרת בקובץ C אחר המחובר לאותו פרוייקט (פרוייקט עם כמה קבצי C), אז נניח שהגדרתי אותו כ-extern האם אני אוכל להשתמש בו מחוץ לפונק' ?

פורסם

שוב, כמו כל משתנה אחר:

הפונקציה יכולה להחזיר את הערך באמצעות ערך החזרה.

הפונקציה יכולה להחזיר את הערך באמצעות פרמטר פלט (ע"י מצביע).

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

האופציה השלישית היא הפחות מועדפת, אגב. עדיף להימנע ממשתנים גלובליים.

פורסם
  • מחבר

ואם אני מגדיר את הפרמטר בתוך הפונק' כ-extern אני אוכל להשתמש בו בלי הצהרה עליו בכל פונק' אחרת בכל קובץ אחר ?

פורסם

משתנה שהוגדר בתוך פונקציה יהיה "מוכר" אך ורק בתוכה.

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

פורסם
  • מחבר

כלומר אם יש לי 2 קבצי C שבכ"א מהם קיימת פונק', ואני רוצה שפונק' 2 תכיר את הפרמטר מפונק' 1, אני אמור להדגיר אותו בקובץ של פונק' 1 מחוצה לה ועוד פעם בתוך פונק' 1 כ-extern ואז פונק' 2 תוכל להשתמש בערך העדכני של אותו פרמטר או שהיא תקבל את הערך אליו אותחל ?

פורסם
  • מחבר

my_main.c
=========

#include<stdio.h>
.
.
.
#include "1.h"
#include "2.h"

int main()
{
bla bla

return 0;
}


1.c
====
int x;

void func_1(void)
{

extern int x=0;

x=9;
}

2.c
=====

void func_2(void)
{
int x;
printf( "x=%d",x);

}


האם ההדפסה תיתן x=9 ? או שאני צריך להגדיר את x אחרת ?

פורסם

כשאתה מגדיר int x אז אתה מגדיר משתנה חדש בשם x. כשאתה מגדיר extern int x אתה אומר לקומפיילר להשתמש במשתנה קיים בשם x, שצריך להיות מוגדר במקום אחר (אם הוא לא מוגדר בשום מקום אחר, תהיה לך שגיאת linkage).

במקרה שלך, הגדרת משתנה אחד גלובלי בשם x, בפונקציה func_1 אמרת לקומפיילר להשתמש בו, ובפונקציה func_2 הגדרת משתנה אחר בשם x. אז הקוד לא יעבוד.

הדרך המומלצת לעבוד עם extern היא להגדיר אותו בדיוק בשני מקומות:

בקובץ h להגדיר extern int x.

בקובץ c אחד ויחיד להגדיר int x.

כל מי שרוצה להשתמש ב-x צריך להגדיר גם כן extern int x או לעשות include לאותו קובץ h.

פורסם
  • מחבר

הבנתי... תודה ! :)

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים