در این مقاله همه چیز در مورد متغیر ها در زبان برنامه نویسی C رو یادمیگیرید.
فهرست
– مقداردهی اولیه متغیرها در زبان برنامه نویسی C
– scope و محدوده دسترسی متغیرها در زبان برنامه نویسی C
– تعریف extern برای متغیرهای global در زبان C
متغیرها در زبان برنامه نویسی C
متغیر فضایی در حافظه است که یک اسم روش میذاریم و
میتونیم مقدارش رو بخونیم یا مقادیر جدید در این فضای حافظه بنویسیم.
انواع متغیر اولیه در زبان برنامه نویسی C
نوع هایی هستند که بصورت پیش فرض وجود دارند، انواع ثانویه رو خودمون میسازیم. در ادامه به انواع اولیه میپردازیم.
انواع متغیر اینتیجر در زبان سی
اینتیجر یعنی اعداد صحیح ، این نوع متغیرها میتونن علامت دار یا بدون علامت، و 8 ، 16 ، 32 یا 64 بیتی باشند. در ادامه انواع اولیه طبق استاندارد زبان برنامه نویسی C رو میبینید.
signed char : عدد صحیح 8 بیتی علامت دار از -128 تا 127 .
unsigned char : عدد صحیح 8 بیتی بدون علامت از 0 تا 255 .
char : بسته به سیستم ممکن است 8 بیتی علامت دار یا بدون علامت باشد، در مورد برنامه نویسی میکروکنترلرهای STM32 این نوع متغیر 8 بیتی بدون علامت هست با مقدار از 0 تا 255 . بصورت قراردادی از این نوع فقط برای ذخیره سازی کاراکترهای ASCII استفاده میشود، مثلا ‘m’ .
short int : عدد صحیح 16 بیتی با مقدار از -32768 تا 32767 . اسامی دیگر این نوع: short و signed short int و signed short .
unsigned short int : عدد صحیح 16 بیتی بدون علامت با مقدار از 0 تا 65535 . نام دیگر این نوع unsigned short هست.
int : عدد صحیح 32 بیتی علامت دار با مقدار از –2,147,483,648 تا 2,147,483,647. نام دیگر این نوع signed int یا signed است.
unsigned int : 32 بیتی بدون علامت با مقدار از 0 تا 4,294,967,295 . نام دیگر : unsigned .
long int : بسته به سیستم ممکن است 32 یا 64 بیتی باشد. در برنامه نویسی میکروکنترهای STM32 این نوع متغیر 32 بیتی و مشابه int است. نام های دیگر: long و signed long int و signed long .
unsigned long int : بسته به سیستم ممکن است 32 بیتی یا 64 بیتی باشد. در برنامه نویسی میکروکنترلرهای STM32 این نوع متغیر مشابه نوع unsigned int است. نام دیگر: unsigned long .
long long int : عدد صحیح 64 بیتی علامت دار با رنج از
-9,223,372,036,854,775,808 تا 9,223,372,036,854,775,807. نام دیگر long long و signed long long و signed long long int .
unsigned long long int : عدد صحیح 64 بیتی بدون علامت با مقدار از 0 تا 18,446,744,073,709,551,615 . نام دیگر : unsigned long long .
با توجه به اینکه انواع اولیه اصلی استاندارد ، اسامی سردرگم کننده دارند و همچنین در سیستم های مختلف، عملکرد متفاوتی ممکن است داشته باشند، در برنامه نویسی میکروکنترلر از انواعی استفاده میکنیم که فایل stdint.h برای ما فراهم کرده.این انواع بر اساس انواع اصلی ساخته شدن و نامگذاری اونها طوری هست که از روی نام همه چیز مشخصه.
انواع صحیح بدون علامت:
مثلا در مورد نوع uint32_t ، حرف u به معنای unsigned یا بدون علامت هست، int به معنای عدد صحیح بودن هست، 32 تعداد بیت هاست که 32 بیت میشه چهار خونه حافظه و _t به معنای این هست که این یک type یا نوع متغیر هست.
انواع متغیر حقیقی در زبان برنامه نویسی C
اعداد اعشاری و علامت دار هستند، حجم این نوع متغیر ها نیز به سیستم وابسته است. در ادامه ویژگی این متغیرها در برنامه نویسی میکروکنترلرهای STM32 آورده شده.
float : اعداد حقیقی 4 بایتی.
double : اعداد حقیقی 8 بایتی.
long double : اعداد حقیقی 8 بایتی.
تعریف متغیر
برای تعریف متغیر ابتدا نوع متغیر سپس یک فاصله و بعد از اون اسم متغیر میاد ، در انتهای خط هم علامت ; قرار میگیره.
فاصله ی بین نوع متغیر و اسم متغیر باید white space باشه ، هر ترکیب و تعدادی از کاراکترهای space و tab و enter قبوله .
مقدار دهی اولیه متغیرها
در تعریف متغیر میتونیم مقدار اولیه اون متغیر رو هم مشخص کنیم، اگر اینکار رو انجام ندید مقدار اولیه پیشفرض صفر در این متغیرها ذخیره میشه.
نکته : نمیشود در مقدار دهی اولیه متغیرهای global از متغیرهای global دیگر استفاده کرد.
لیست تعریف متغیر
همزمان میتونید چند تا متغیر هم از یک نوع تعریف کرد. باید اسم متغیر ها رو پشت سر هم نوشت و بین اونها علامت , گذاشت.
Scope و محدوده دسترسی به متغیر ها در زبان C
Scope یعنی محدوده تعریف و دسترسی، یعنی از چه مکانهایی در کد میتونیم مقدار متغیر رو بخونیم یا مقدار جدید رو در متغیر بنویسیم. برای متغیرهایی که در loop ها تعریف شده اند ، محدوده ی دسترسی همان loop است.
متغیرهای global در زبان C
متغیر هایی که در فایل های سورس کد و خارج از توابع تعریف میشن متغیرهای gloal هستند. محدوده دسترسی متغیرهای global ، اون فایل سورس کدی هست، که متغیر در اون فایل تعریف شده.
تعریف extern متغیر ها در زبان C
در تعریف extern یک متغیر در زبان C ، کلمه ی کلیدی extern به تعریف اصلی اضافه میشود. این تعریف به معنای یک اعلان به کامپایلر است با این مفهوم که متغیر مورد نظر در فایل دیگری تعریف شده است.
در حالت عادی فقط از همون فایل سورس کدی که متغیر global رو در اون تعریف کردیم میتونیم به متغیرهای global دسرسی داشته باشیم. اگر بخواهیم از سایر فایل های سورس کد هم به متغیر دسترسی پیدا کنیم باید تعریف extern اون متغیر رو به فایلهای سورس کد دیگر اضافه کنیم. کلمه ی extern قبل از تعریف عادی متغیر قرار میگیره.
تعریف extern متغیرهای global در فایل های header یا .h هم وجود داره. اینطوری دسترسی به متغیر مورد نظر از هر فایل سورسی که فایل header به اولش اضافه بشه ممکن هست.
متغیرهای Static و global در زبان برنامه نویسی C
کلمه ی static قبل از تعریف متغیرهای global ، محدوده دسترسی اون متغیر رو به همون فایل .c یا سورس کد محدود میکنه و دیگه از سایر فایل های .c نمیشه به اون متغیر دسترسی داشت.
تعریف static یک متغیر میتونه همزمان در چند فایل .c وجود داشته باشه، اینجوری هر کدوم از اون فایلها یکی نسخه از اون متغیر برای خودشون دارند، یعنی چند فایل سورس کد متغیرهای هم نام دارند که البته به هم ربطی ندارند و در فضای جداگانه در حافظه ذخیره شدن.
در حالت عادی نمیتونید متغیرهای هم نام در فایل های سورس کد مختلف داشته باشید، فقط در حالتی ممکن است که با کلمه ی static دسترسی به اون متغیرها رو محدود کنید.
تعریف static متغیرهای global در فایل های header هم میتونه وجود داشته باشه. اون فایل header به اول هر فایل .c که اضافه بشه، اون فایل .c یک نسخه از اون متغیر برای خودش خواهد داشت.
متغیرهای local
متغیرهایی که داخل توابع تعریف میشن متغیرهای local (منطقه ای ) هستند. نام دیگر این متغیرها اتوماتیک هست، چون با فراخوانی تابع به صورت اتوماتیک در استک بهشون فضا اختصاص داده میشه و با اتمام فراخوانی تابع هم از بین میرن.
برای متغیرهای local ، محدوده دسترسی تابعی هست که متغیر در اون تعریف شده.
متغیرهای local و static در زبان برنامه نویسی C
این نوع داستانشون کلا متفاوته. با قرارگیری کلمه ی static قبل از تعریف متغیرهای local ، عمر متغیر تا پایان برنامه افزایش میابد و با اتمام تابع متغیر نابود نشده و مقدار خود را حفظ میکند. البته محدوده دسترسی به این متغیرها تفاوتی با متغیرهای معمولی local نداشته و به تابعی که در آن تعریف شده ، محدود میگردد.
مثالی از کاربرد این متغیرهای static و local شمارش تعداد دفعات فراخوانی شدن یک تابع است.