اولین بار است که به این وب‌سایت می‌آیید. راهنما را مطالعه کنید!
x
موسسه خیریه محک

شهر ریاضی بازی-ریاضی

اعلان یک متغیر ایستا به عنوان متغیر خارجی

0 امتیاز
970 نمایش

فایده‌ی اعلان متغیر ایستا به عنوان متغیر extern داخل یک تابع چیه؟

#include <stdio.h>

static i = 5;

int main()
{
extern int i;
printf("%d\n",i);
return 0;
}

و اینکه چرا به این صورت درست نیست؟

int main()
{
static i = 5;
extern int i;
printf("%d\n",i);
return 0;
}
پرسیده شده شنبه ۱۷ فروردین ۱۳۹۲ در C++ توسط CPP_Crawler4  

1 پاسخ

0 امتیاز

اول دلیل این که چرا دومی درست نیس. کلیدواژه‌ی extern به کامپایلر اعلان می‌کنه که متغیر i در جایی غیر این تابع تعریف شده و extern in i فقط یک اعلان هست. اما وقتی کامپایلر به خط static int i و extern int i در یک تابع برخورد کنه انگار i هم در تابع تعریف شده و هم در جایی دیگه (که قراره بعداً به داخل تابع منتقل بشه). بنابراین اخطار تعریف مجدد صادر می‌کنه.

قرار دادن extern برای استفاده از یک متغیر تعریف شده در یک بلاک دیگه در بلاک حاضر انجام می‌شه. در جایی که extern می‌آد تنها اعلان اتفاق می‌افته و تعریف وجود نداره. تعریف از جایی دیگه برداشته می‌شه.

به هر حال extern کردن یک متغیر سراسری در همون فایلی که کد main هست، چیز اضافه‌ای به ما نمی‌ده.

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده چهارشنبه ۲ مرداد ۱۳۹۲ توسط prodo