#170#storage_class #storage #class #auto
✅کلاس های حافظه (Storage Class) در ++C
🔹نحوه تعریف متغییری از نوع auto
auto string name;❌کامپایلر ها به صورت پیش فرض برای متغییر هایی که کلاس حافظه auto برای آنها ذکر نشود را از این نوع کلاس در نظر می گیرد, برای مثال کدهای زیر معادل یکدیگر هستند
int i;
auto int i;
❌ در کامپایلر Visual C++11 (کامپایلرهای دیگه این امکان را ندارند) زمانی که از auto پشت یک متغییر استفاده می کنیم با این کار داریم به متغییر می گوییم که هر مقداری را که در زمان ایجاد شدن به متغییر داده شد نوع داده ای آن متغییر را نیز به صورت اتوماتیک مطابق با مقدار که به متغییر دادیم انتخاب کن برای مثال کد زیر را در نظر بگیرید:
auto i="@Learncpp";کد بالا به صورت اتوماتیک نوع داده ای متغییر را از نوع string قرار خواهد داد چون مقداری که به متغییر i انتصاب داده می شود از نوع string هست
❌ وقتی در کامپایلر Visual C++11 از auto استفاده می کنیم باید دقت داشته باشیم تا موقع تعریف متغییر مقداری را به متغییر بدهیم تا کامپایلر بتواند نوع داده ای را برای متغییر مشخص کند ولی اگر هنگام تعریف متغییر مقداری مشخص نکنیم با خطایی مبنی بر اینکه حتما باید در هنگام تعریف متغییر مقداری هم به متغییر داده شود مواجه خواهیم شد
@Learncpp
#171#storage_class #storage #class #auto
✅کلاس های حافظه (Storage Class) در ++C
🔹استفاده از کلاس حافظه auto
مثال) برنامه ای بنویسید که نحوه تعریف متغییری از نوع auto , محدوده شناسایی و طول عمر متغییری به نام variable را نشان می دهد
❌کدهای زیر در کامپایلر های دیگر به غیره Visual C++11 به بعد اجرا شوند (دلیلشم در پست telegram.me/Learncpp/484 توضیح داده شد)
#include <iostream>
using namespace std;
void auto_test()
{auto string date;
date="1395/6/27";
cout<<date;
}
int main()
{auto_test();
return 0;
}
در مثال بالا تابعی به نام auto_test تعریف کرده ایم که در بدنه این تابع متغییری به نام date از نوع کلاس auto با نوع داده ای string ایجاد سپس در متنی را درون متغییر date ریخته و آن را چاپ کرده ایم
@Learncpp
Telegram
Learning ©➕➕
#170
#storage_class #storage #class #auto
✅کلاس های حافظه (Storage Class) در ++C
🔹نحوه تعریف متغییری از نوع auto
auto string name;
❌کامپایلر ها به صورت پیش فرض برای متغییر هایی که کلاس حافظه auto برای آنها ذکر نشود را از این نوع کلاس در نظر می گیرد, برای…
#storage_class #storage #class #auto
✅کلاس های حافظه (Storage Class) در ++C
🔹نحوه تعریف متغییری از نوع auto
auto string name;
❌کامپایلر ها به صورت پیش فرض برای متغییر هایی که کلاس حافظه auto برای آنها ذکر نشود را از این نوع کلاس در نظر می گیرد, برای…
#172#storage_class #storage #class #auto
✅کلاس های حافظه (Storage Class) در ++C
🔹طول عمر و محدوده کلاس حافظه auto
خب حالا بیایم محدوده و طول عمر متغییر date رو یکم با هم برسی کنیم اگه دقت کنیم وقتی کامپایلر به ابتدای مثال تابع auto_test telegram.me/Learncpp/485) پرش می کند (نحوه پرش توابع telegram.me/Learncpp/414) متغییر data ایجاد می شود و وقتی به براکت بسته تابع یعنی } رسید نابود می شود
🔹از کجا بدونیم حرفی که در مورد محدوده و طول عمر متغییر date در مثال (telegram.me/Learncpp/485) زدیم درسته؟
خب اگه بیایم بعد فراخوانی تابع auto_test درون main خط زیر را اضافه کنیم با خطایی مبنی بر اینکه متغییر date در این محدوده تعریف نشده
error: 'date' was not declared in this scopeپس متوجه شدیم که وقتی متغییری را نوع کلاس اتوماتیک یعنی auto تعریف میکنیم محدوده و طول عمرش فقط درون همان تابعی هست که آن متغییر را تعریف کردیم و امکان دسترسی توابع دیگر به این تابع وجود ندارد
@Learncpp
Telegram
Learning ©➕➕
#171
#storage_class #storage #class #auto
✅کلاس های حافظه (Storage Class) در ++C
🔹استفاده از کلاس حافظه auto
مثال) برنامه ای بنویسید که نحوه تعریف متغییری از نوع auto , محدوده شناسایی و طول عمر متغییری به نام variable را نشان می دهد
❌کدهای زیر در کامپایلر…
#storage_class #storage #class #auto
✅کلاس های حافظه (Storage Class) در ++C
🔹استفاده از کلاس حافظه auto
مثال) برنامه ای بنویسید که نحوه تعریف متغییری از نوع auto , محدوده شناسایی و طول عمر متغییری به نام variable را نشان می دهد
❌کدهای زیر در کامپایلر…
#173#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه ی ثبات (register)
زمانی که از کلاس حافظه ثبات برای متغییری استفاده می کنیم به کامپایلر دستور می دهیم که متغییری که از نوع ثبات (register) تعریف شده بجای حافظه Ram از ثبات های CPU برایش حافظه بگیرد و از این به بعد هر موقع به این متغییر داخل برنامه نیاز شد داخل خونه های ثبات دنبالش بگردد تا سرعت پردازش و دسترسی به این متغییر بیشتر شود
برای درک بهتره مطلب کلاس حافظه ی ثبات به مثال کتابخانه دقت کنید:
فرض کنید داخل یک کتابخونه ای هستید که این کتابخونه یک کتابدار هم دارد که مسئولیتش دادن کتاب به اعضاست, خب تو این کتابخونه ممکنه بعضی از کتابها مثل کتاب "چطوری نصفه روزه پولدار بشیم" مورد علاقه خیلی از اعضا باشد و طرفدارهایش بیشتر از کتابهای دیگه باشه پس این کتابدار کتابهایی را که میدونه پر طرفدار هستند و بیشتر مورد استفاده اعضای کتابخونه قرار میگیره رو کنار دست خودش میذاره تا هر کسی یکی از این کتاب ها رو تقاضا کرد کتابدار فورا کتاب رو بدون اینکه وقتی برای رفتن تو قفسه ها خرج کند خیلی سریع از کنار دستش آن را به اعضا می دهد که این وسط باعث میشود روند تحویل کتاب های پر طرفدار سریع تر پیش بره و بعضی کتاب های هم مثله "باز هم نمایش بی فرهنگی ایرانی ها با حمله به صفحات چهره های معروف دنیا؟ آخه تا کی!" ممکنه خیلی طرفدار آنچنانی نداشته باشه پس آنها را داخل قفسه هایی شماره گذاری شده قرار می دهند تا بعدا کسی از این دست کتاب های کم طرفدار را خواست کتابدار از تو قفسه های کتاب آن کتاب را برایش بیاورد که این رفت و برگشت و تحویل کتاب مدت زمان بیشتری به نسبت کتابی که کنار دستش هست می برد
پس اینطوری می توان نتیجه گرفت که ما (برنامه نویس) وقتی میدانیم یک متغییر زیاد تو برنامه صدا زده میشود را بیاییم از نوع register تعریف کنیم که با این نحوه تعریف, این متغییر در صورتی که ثبات برای این متغییر فضا داشته باشد (telegram.me/Learncpp/492) داخل ثبات های ax,bx,cx و... قرار بگیرد و با این کار داریم به cpu دستور می دهیم بجای Ram (همان قفسه هایی که طرفدارهای کتاباهاش کم تره) داخل ثبات ها (جایی که کتاباهای پر طرفدار قرار داره) دنبال متغییر برود
@Learncpp
Telegram
Learning ©➕➕
#178
#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه ی ثبات (register)
🔹برای استفاده از کلاس حافظه ثبات به نکات زیر توجه کنید :
3 . توجه داشته باشیم بدلیل اینکه تعداد ثبات های پردازنده (cpu) محدود هست تا جایی…
#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه ی ثبات (register)
🔹برای استفاده از کلاس حافظه ثبات به نکات زیر توجه کنید :
3 . توجه داشته باشیم بدلیل اینکه تعداد ثبات های پردازنده (cpu) محدود هست تا جایی…
#174#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه ی ثبات (register)
🔺نحوه تعریف متغییری از نوع register
storage_class type var_name;register int i;register char ch@Learncpp
#175#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه ی ثبات (register)
🔺برای استفاده از کلاس حافظه ثبات به نکات زیر توجه کنید :
1 . از کلاس ثبات فقط برای آرگومان های می توان استفاده کرد
2 . از کلاس ثبات فقط برای متغییر های محلی می توان استفاده کرد
3 . طول عمر و محدوده متغییر هایی که از نوع کلاس حافظه ثبات تعریف می شوند شبیه کلاس حافظه اتوماتیک(آدرس طول عمر اتوماتیک) هست
4 . توجه داشته باشیم بدلیل اینکه تعداد ثبات های پردازنده (cpu) محدود هست تا جایی که می توانیم متغییر هایی را که بیشترین استفاده را در برنامه دارند را از نوع کلاس ثبات تعریف کنیم
5 . آدرس متغییر هایی با کلاس حافظه ثبات را می توان استفاده کرد
@Learncpp
#176#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه ی ثبات (register)
🔹برای استفاده از کلاس حافظه ثبات به نکات زیر توجه کنید :
1 . از کلاس ثبات فقط برای آرگومان های می توان استفاده کرد
#include <iostream>
using namespace std;
void use_register(register int test)
{cout << test;
}
int main()
{use_register(40);
return 0;
}
همانطور که در کد بالا می بینید میتوانیم کلاس حافظه register را هم به عنوان آرگومان به تابع تعریف کنیم
@Learncpp
#177#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه ی ثبات (register)
🔹برای استفاده از کلاس حافظه ثبات به نکات زیر توجه کنید :
2 . از کلاس ثبات فقط برای متغییر های محلی می توان استفاده کرد
#include <iostream>
register int test; //error
int main()
{register int test; //ok
return 0;
}
در قطعه کد بالا متغییر test را در بالای main تعریف کردیم که با این کار این متغییر به صورت عمومی در همه جا قابل شناسایی هست ولی بخاطر استفاده از register قبل تعریف متغییر با خطایی از طرف کامپایلر مواجه خواهیم شد مبنی بر اینکه نمی توان کلاس حافظه ثبات را به صورت عمومی تعریف کرد
error C2390: 'test' : incorrect storage class 'register'@Learncpp
#178#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه ی ثبات (register)
🔹برای استفاده از کلاس حافظه ثبات به نکات زیر توجه کنید :
3 . توجه داشته باشیم بدلیل اینکه تعداد ثبات های پردازنده (cpu) محدود هست تا جایی که می توانیم متغییر هایی را که بیشترین استفاده را در برنامه دارند را از نوع کلاس ثبات تعریف کنیم, بعضی وقتها هم ممکن است متغییری از نوع register تعریف کنیم ولی ثبات های پردازنده جایی برای این متغییر نداشته باشد در اینجا کامپایلر به صورت خودکار متغییری را که از کلاس حافظه register تعریف شده را به صورت کلاس حاظه اتوماتیک تعریف می کند
4 . طول عمر و محدوده متغییر هایی که از نوع کلاس حافظه ثبات تعریف می شوند شبیه کلاس حافظه اتوماتیک (telegram.me/Learncpp/486) هست
@Learncpp
Telegram
Learning ©➕➕
#172
#storage_class #storage #class #auto
✅کلاس های حافظه (Storage Class) در ++C
🔹طول عمر و محدوده کلاس حافظه auto
خب حالا بیایم محدوده و طول عمر متغییر date رو یکم با هم برسی کنیم اگه دقت کنیم وقتی کامپایلر به ابتدای مثال تابع auto_test telegram.me/Learncpp/485)…
#storage_class #storage #class #auto
✅کلاس های حافظه (Storage Class) در ++C
🔹طول عمر و محدوده کلاس حافظه auto
خب حالا بیایم محدوده و طول عمر متغییر date رو یکم با هم برسی کنیم اگه دقت کنیم وقتی کامپایلر به ابتدای مثال تابع auto_test telegram.me/Learncpp/485)…
#179#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه ی ثبات (register)
🔹برای استفاده از کلاس حافظه ثبات به نکات زیر توجه کنید :
5 . آدرس متغییر هایی با کلاس حافظه ثبات را می توان استفاده کرد
#include <iostream>
using namespace std;
int main()
{register int test=4;
cout«&test;
//or
string x = "@Learncpp";
register string &i=x;
cout«i;
return 0;
}
❌ در سایت های کپی پیس ایرانی حتی کتاب های چاپ شده (گوگولیای متقلب😑) به اشتباه نوشته اند که آدرس متغییر هایی با کلاس حافظه ثبات معنی ندارد ولی این کار ممکن هست و در مثال بالا هم به این نکته اشاره شد پس می توان آدرس متغییر هایی با کلاس حافظه ثبات را استفاده کرد
Microsoft Document
ANSI C does not allow for taking the address of a register object; this restriction does not apply to C++. However, if the address-of operator (&) is used on an object, the compiler must put the object in a location for which an address can be represented. In practice, this means in memory instead of in a register.
@Learncpp
#180#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه ی ثبات (register)
مثال) برنامه ای که تفاوت زمان اجرا متغییری که از register استفاده می کند با متغییری که استفاده نمی کند را نمایش می دهد
#include <iostream>
int main()
{for(register int i=0;i<999999999;i++);
return 0;
}
هدف از for برنامه بالا به نمایش کشیدن تفاوت زمانی هست که کار کامپایلر به اتمام می رسد اگر در تصویر (telegram.me/Learncpp/495) دقت کنید وقتی از کلاس حافظه register استفاده نکرده ایم کامپایلر به طور میانگین 5 ثانیه طول میکشد تا بدنه تابع main شامل حلقه for را اجرا کند ولی همینطور که در تصویر (telegram.me/Learncpp/496) می بینید وقتی از register برای متغییر i استفاده کرده ایم این زمان به کمتر از 1 ثانیه کاهش یافته که مزیت استفاده از کلاس حافظه ثبات را نمایش می دهد
@Learncpp
Telegram
Learning ©➕➕
#181
#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹عدم استفاده از کلاس حافظه ی ثبات برای متغییر i و نمایش زمانی که برای کامپایل, بدنه تابع main صرف شده است
@Learncpp
#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹عدم استفاده از کلاس حافظه ی ثبات برای متغییر i و نمایش زمانی که برای کامپایل, بدنه تابع main صرف شده است
@Learncpp
#181
#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹عدم استفاده از کلاس حافظه ی ثبات برای متغییر i و نمایش زمانی که برای کامپایل, بدنه تابع main صرف شده است
@Learncpp
#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹عدم استفاده از کلاس حافظه ی ثبات برای متغییر i و نمایش زمانی که برای کامپایل, بدنه تابع main صرف شده است
@Learncpp
#182
#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹استفاده از کلاس حافظه ی ثبات برای متغییر i و نمایش زمانی که برای کامپایل, بدنه تابع main صرف شده است
@Learncpp
#storage_class #storage #class #register
✅کلاس های حافظه (Storage Class) در ++C
🔹استفاده از کلاس حافظه ی ثبات برای متغییر i و نمایش زمانی که برای کامپایل, بدنه تابع main صرف شده است
@Learncpp
#183#storage_class #storage #class #static
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس های حافظه استاتیک (static)
بعضی مواقع تو برنامه نیاز هست متغییری داشته باشیم که مقدارش را بعد از چندین بار فراخوانی حفظ کند تا از این مقدار در توابع دیگر استفاده کنیم مثلا فرض کنید یک تابعی به نام count دارید که می خواهید بدانید که این تابع چند بار داخل main فراخوانی خواهد شد, برای این کار باید به کامپایلر بفهمانیم که متغییری داخل تابع count تعریف کند که این متغییر بعد از هر فراخوانی تابع count مقدار قبلی خودش رو حفظ کند برای این که بتوانیم به یک متغییر توانایی حفظ مقدار قبلی را بدهیم نیاز به تعریف متغییر از نوع کلاس حافظه استاتیک هست
🔹نحوه تعریف متغییری از نوع استاتیک
static int score;در کد بالا یک متغییری به نام score از کلاس حافظه static تعریف کرده ایم که با این نوع تعریف باعث می شود متغییر score قابلیت نگه داری مقدار قبلی خود را داشته باشد
⛔️ وقتی ما یه متغیری رو از نوع static تعریف میکنیم به صورت خودکار به متغییر یک مقدار اولیه صفر داده خواهد شد
🔹متغییر استاتیک را به دو صورت می توان تعریف کرد :
🔺متغییر استاتیک محلی
🔺متغییر استاتیک عمومی
@Learncpp
#184#storage_class #storage #class #static
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس های حافظه استاتیک (static)
🔹متغییر استاتیک محلی
⛔️ منظور از متغییر استاتیک محلی یعنی اینکه فقط داخل تابعی که تعریف می شود قابل شناسایی هست و برای توابع دیگر ناشناخته هست
⛔️ محدوده متغییر استاتیک محلی فقط درون همان تابعی که تعریف شده شناخته می شود و در توابع دیگر قابل شناسایی نیست و طول عمر متغییر های استاتیک محلی هم از زمانی که main اجرا شده ایجاد و تا زمانی که کامپایلر به return 0 رسید از بین می روند
⛔️ متغییر استاتیک محلی برای اولین باری که تابع فراخوانی می شود ایجاد می شوند و تنها یکبار مقدار دهی اولیه می شوند همچنین هنگام خروج از تابع آخرین مقدارشان را حفظ می کنند این یعنی اینکه برای بار دوم که تابع فراخوانی شد دستوری که باعث تعریف متغییر استاتیک محلی می شود از طرف کامپایلر نادیده گرفته خواهد شد تا مقدار قبلی متغییر استاتیک محلی حفظ شود
برای درک بهتر تذکرات بالا به مثال (telegram.me/Learncpp/504) توجه کنید
@Learncpp
Telegram
Learning ©➕➕
#185
#storage_class #storage #class #static
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس های حافظه استاتیک (static)
🔹متغییر استاتیک محلی
مثال) برنامه ای بنویسید که امتیاز یک بازیکن را پس از چندین بار فراخوانی داخل یک متغییر حفظ کند (هدف نحوه استفاده متغییر…
#storage_class #storage #class #static
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس های حافظه استاتیک (static)
🔹متغییر استاتیک محلی
مثال) برنامه ای بنویسید که امتیاز یک بازیکن را پس از چندین بار فراخوانی داخل یک متغییر حفظ کند (هدف نحوه استفاده متغییر…
#185#storage_class #storage #class #static
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس های حافظه استاتیک (static)
🔹متغییر استاتیک محلی
مثال) برنامه ای بنویسید که امتیاز یک بازیکن را پس از چندین بار فراخوانی داخل یک متغییر حفظ کند (هدف نحوه استفاده متغییر استاتیک محلی هست)
#include <iostream>
using namespace std;
void print_score()
{static int score;
score++;
cout<<"value variable num is : "<<score<<endl;
}
int main()
{print_score(); //cout 1
print_score(); //cout 2
print_score(); //cout 3
print_score(); //cout 4
print_score(); //cout 5
return 0;
}
در تابع print_score متغییری به اسم score از نوع کلاس static تعریف کرده ایم که بار اولی که print_score داخل main صدا زده می شود کامپایلر تابع print_score را اجرا و متغییر score را ایجاد و یک مقدار به آن اضافه کرده و آن را چاپ می کند, برای بار دومی که کامپایلر تابع print_score را اجرا می کند اینبار دستور static int score از طرف کامپایلر نادیده گرفته خواهد شد و اجرا نمی شود تا مقداری که از قبل داخل متغییر score هست از بین نرود
@Learncpp
#186#storage_class #storage #class #static
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس های حافظه استاتیک (static)
🔹متغییر استاتیک عمومی
طرز کار متغییر استاتیک عمومی همانند متغییر استاتیک محلی است ولی با این تفاوت که متغییری که از نوع عمومی تعریف می شود در همه جا قابل شناسایی هست ولی متغییری که از نوع استاتیک محلی تعریف می شود فقط داخل تابعی که تعریف می شود شناخته شده است
⛔️ طول عمر متغییر استاتیک عمومی همانند متغییر سراسری ( متغییری که بالای main نوشته می شود) هست
مثال) برنامه ای که نحوه استفاده از متغییر استاتیک عمومی را نمایش می دهد
#include <iostream>
using namespace std;
static int score;
void test()
{score++;
}
int main()
{test();
cout<<score<<endl;//cout 1
test();
cout<<score<<endl;//cout 2
test();
cout<<score<<endl;//cout 3
return 0;
}
همانطور که در کد بالا دیدید کد
static int score بالای main نوشته شده که این کار باعث شده هم مقدار صفر به صورت پیش فرض درون متغییر قرار بگیرد و هم متغییر score در تمامیه توابع دیگر قابل شناسایی باشد@Learncpp
#187#storage_class #storage #class #static
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس های حافظه استاتیک (static)
🔺متغییر استاتیک محلی
🔺متغییر استاتیک عمومی
⛔️ چه تفاوتی بین متغییر سراسری با متغییر استاتیک عمومی هست؟
متغییری که به صورت سراسری تعریف می شود با متغییری که از نوع کلاس استاتیک عمومی تعریف می شود هیچ تفاوتی ندارند به شرطی که در یک فایل باشند ولی گاهی لازمه که برنامه ای که می نویسید دارای چندین فایل باشد اینجاست که تفاوتی ایجاد می شود و آن هم این است که متغییری که به صورت سراسری تعریف می شود می توان در فایل های دیگر با استفاده از کلاس حافظه خارجی (telegram.me/Learncpp/507) از آن استفاده کرد ولی متغییری که از نوع کلاس حافظه استاتیک عمومی تعریف می شود فقط در همان فایلی که قرار دارد قابل دسترسی و شناسایی هست
@Learncpp
Telegram
Learning ©➕➕
#188
#storage_class #storage #class #extern
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه خارجی (extern)
گاهی اوقات در برنامه نویسی ممکنه بدلیل خوانایی و درک بهتر خطوط برنامه یا بزرگ بودن پروژه, کدهای برنامه داخل چندین فایل تقسیم بندی می شوند حال اگر…
#storage_class #storage #class #extern
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه خارجی (extern)
گاهی اوقات در برنامه نویسی ممکنه بدلیل خوانایی و درک بهتر خطوط برنامه یا بزرگ بودن پروژه, کدهای برنامه داخل چندین فایل تقسیم بندی می شوند حال اگر…
#188#storage_class #storage #class #extern
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه خارجی (extern)
گاهی اوقات در برنامه نویسی ممکنه بدلیل خوانایی و درک بهتر خطوط برنامه یا بزرگ بودن پروژه, کدهای برنامه داخل چندین فایل تقسیم بندی می شوند حال اگر بخواهیم متغییری که در یکی از فایل ها تعریف کرده ایم در فایل های دیگر از این متغییر استفاده کنیم باید از کلاس حافظه خارجی (extern) استفاده کنیم مثلا فرض کنید دو فایل به اسم file1.cpp و file2.cpp ایجاد کرده اید که در file1 متغییری (یا تابعی) به صورت سراسری (بالای main) به اسم code تعریف میکنید حال بنا به دلایلی می خواهید از این متغییر درون file2 (یا تعداد فایل های بیشتر) استفاده کنید برای اینکه بتوان از متغییر code که در file1 تعریف کرده اید در file2 استفاده کنید باید متغییری با همان نوع داده (telegram.me/Learncpp/91) و اسم متغییری که در file1 تعریف کرده اید در file2 نیز تعریف کنید با این تفاوت که قبل از نوع داده extern قرار بدهید تا به کامپایلر بفهمانید که قرار است از متغییری که در جایی دیگر تعریف شده با بکار بردن کلمه extern می خواهیم استفاده کنیم و دوباره برایش حافظه ای نگیرد
🔹نحوه تعریف متغییری از نوع کلاس حافظه خارجی (extern)
extern int number;@Learncpp
Telegram
Learning ©➕➕
انواع داده ها و مقادیر قابل قبول آنها
@Learncpp
@Learncpp
#189#storage_class #storage #class #extern
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه خارجی (extern)
⛔️ متغییر یا توابعی که فقط قرار هست یکبار تعریف کنیم و در فایل های دیگر توسط extern از آنها استفاده کنیم باید حتما در فایلی که main ما وجود دارد تعریفشان کنیم تا با خطایی از طرف کامپایلر مواجهه نشیم یعنی در فایلی که mian برنامه تعریف شده متغییر یا تابع را تعریف کنیم و در فایل های دیگه که main ندارند با استفاده از extern به این متغییر یا توابع تعریف شده در دسترسی داشته باشیم
⛔️ زمانی که متغییر یا تابعی را بالای main تعریف می کنید کامپایلر برایشان حافظه ای می گیرد ولی وقتی بخواهید در فایل های دیگر با استفاده از extern به این متغییر یا توابع دستیابی داشته باشید کامپایلر دیگر برایشان حافظه ای نمی گیرد چون از همان حافظه ای که در فایلی که تعریفشان کردید استفاده می کند و در مصرف حافظه صرفه جویی خواهد شد
⛔️ وقتی می خواهیم از extern استفاده کنیم باید تمام فایل ها از یک پروژه باشند به خاطر همین دلیل وقتی یک متغییر یا تابعی را extern می کنیم نیازی به include کردن کتابخانه ای نیست و کامپایلر به صورت اتوماتیک تشخیص می دهد وقتی از extern استفاده کرده ایم یعنی از قبل داخل فایل اصلی تعریفشان کرده ایم
برای درک بهتر مطلب گفته شده به مثال (telegram.me/Learncpp/509) دقت کنید
@Learncpp
Telegram
Learning ©➕➕
#190
#storage_class #storage #class #extern
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه خارجی (extern)
مثال) نحوه تعریف متغییر و توابع و چگونگی استفاده آنها در فایل های دیگر با استفاده از کلاس حافظه خارجی (extern)
ابتدا باید یک پروژه جدید به اسم…
#storage_class #storage #class #extern
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه خارجی (extern)
مثال) نحوه تعریف متغییر و توابع و چگونگی استفاده آنها در فایل های دیگر با استفاده از کلاس حافظه خارجی (extern)
ابتدا باید یک پروژه جدید به اسم…