متغیرها در زبان C که آردوینو از آن استفاده میکند، ویژگیای به نام حوزه دید (scope) دارند. اولین نسخههای زبانها مثل BASIC، این ویژگی را نداشتند و همهی متغیرها global بودند.
متغیرهای global (سراسری)، در همهی توابع قابلمشاهده و معتبر هستند. در آردوینو هر متغیری که خارج از یک تابع (مانند ()setup()، loop و …) تعریف شود، یک متغیر global خواهد بود. متغیرهای local (محلی) تنها در تابعی که تعریف شدهاند قابلمشاهده هستند.
وقتیکه برنامه شروع به گسترش و بهتبع آن پیچیدگی میکند، متغیرهای local راه خوبی برای کسب این اطمینان هستند که تنها یک تابع به متغیرهای خودش دسترسی دارد. اگر یک تابع بهصورت غیرعمدی متغیرهای یک تابع دیگر را تغییر دهد، خطا (ارور) رخ میدهد. اما استفاده از این نوع متغیر از این خطاهای برنامهنویسی جلوگیری خواهد کرد.
همچنین تعریف و مقداردهی اولیه متغیر درون حلقهی فور گاهی اوقات مفید است. این نوع متغیرها فقط درون براکتهای حلقهی فور قابل دستیابی هستند.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | int gPWMval; // همهی توابع این متغیر را خواهند دید. ( این متغیر در همهی توابع معتبر است.) void setup() { // ... } void loop() { int i; // متغیر آی فقط در درون تابع لوپ قابل مشاهده (معتبر) است. float f; // متغیر اف فقط در درون تابع لوپ قابل مشاهده (معتبر) است. // ... for (int j = 0; j <100; j++){ // متغیر جی فقط درون براکتهای حلقهی فور قابل دستیابی است. } } |
سلام ببخشید آیا تعریف متغیر های لوکال حجم کمتری از برنامه رو مصرف میکنه؟
نه لذوما ولی بی تاثیر هم نیست
تفاوت متغییر لوکال با گلوبال (محلی یا سراسری) تنها در محل گرفتن حافظه است
به این معنی که متغییر های لوکال حافظه مورد نیاز را از قسمت استک برنامه بر میدارند و پس از تمام شدن روتین تابع حافظه اشعال شده آزاد می شود.
در صورتی که متغیر های گلوبال حافظه مورد نیاز را از حافظه کلی برنامه برداشت می کنند و تا مادامی که برنامه در حال اجرا است ، حافظه را آزاد نمی کنند.