متغیر خودکار

از ویکی‌پدیا، دانشنامهٔ آزاد

در برنامه‌نویسی رایانه، متغیر خودکار (به انگلیسی: Automatic variable) به متغیری گفته می‌شود که وقتی جریان اجرای برنامه وارد حوضه متغیر می‌شود، حافظه سیستم به صورت خودکار به آن متغیر تخصیص می‌یابد و با خارج شدن جریان برنامه از حوضه متغیر، متغیر مورد نظر به شکل خودکار آزاد شده و فضای آن به سیستم پس داده می‌شود. اصطلاح متغیر محلی هم گاهی اوقات مترادف با اصطلاح متغیر خودکار استفاده می‌شود اما آن‌ها مجزا هستند و با هم تفاوت دارند. هرچند که در بسیاری از زبان‌های برنامه‌نویسی، آن‌ها مشابه هم هستند، اما متغیر محلی عمومیت بیشتری دارد، بیشتر متغیرهای محلی، متغیر خودکار هم هستند، اما متغیر ایستای محلی هم وجود دارد که با خارج شدن جریان اجرای برنامه از حوضه متغیر، نابود نشده و همچنان در حافظه باقی می‌ماند. این قضیه درباره زبان برنامه‌نویسی سی صادق است. در مورد متغیرهای محلی ایستا، تخصیص حافظه به شکل ایستا صورت می‌گیرد و در کل زمان اجرای برنامه ثابت است و به شکل خودکار نیست. اما به این متغیرها فقط می‌توان در حوضه‌ای که تعریف شده‌اند دسترسی داشت.

در زبان‌های برنامه‌نویسی[ویرایش]

سی و سی++[ویرایش]

در زبان سی و سی++، به این متغیرها، متغیر خودکار گفته می‌شود. تمام متغیرهایی که در داخل یک بلاک تعریف می‌شود، به صورت پیشفرض از نوع خودکار هستند. اما می‌توان به کمک کلمه کلیدی auto هم یک متغیر خودکار را صریحاً اعلام کرد. متغیر خودکاری که هنوز مقداردهی نشده، حاوی یک مقدار تصادفی است. استفاده از کلمه register در اعلان متغیرها، باعث می‌شود تا کامپایلر سعی کند متغیر مورد نظر را در ثبات پردازنده قرار دهد. چون متغیرهای کلاس register در حافظه ذخیره نمی‌شوند، نمی‌توان با عملگر & آدرس آن‌ها را بدست آورد.

در زبان سی++، وقتی که اجرای برنامه به محل اعلان متغیر می‌رسد، سازندهٔ متغیر خودکار فراخوانی می‌شود. وقتی که هم که اجرای برنامه از بلاک کد مورد نظر خارج می‌شود، مخرب به اجرا درمی‌آید. این ویژگی اغلب برای مدیریت کردن اختصاص منابع و آزادسازی آن‌ها استفاده می‌شود. همانند باز کردن و سپس بستن خودکار فایل‌ها یا آزادسازی حافظه.

جاوا[ویرایش]

زبان برنامه‌نویسی جاوا این متغیرها را متغیر محلی می‌نامد. جاوا مشابه سی و سی++ عمل می‌کند اما کلمات کلیدی auto و register در جاوا وجود ندارد. با این حال، مترجم جاوا اجازه استفاده از متغیر محلی که صریحاً مقدار دهی نشده را نمی‌دهد و یک پیغام خطا صادر می‌کند. برخلاف زبان سی و سی++ که کامپایلر تنها یک هشدار چاپ می‌کند. استاندارد جاوا می‌خواهد که تمام متغیرهای محلی قبل از استفاده صریحاً مقدار دهی شوند. البته متغیرهای نمونه این گونه نیستند و آن‌ها به شکل خودکار مقدار پیشفرضی را دریافت (متغیرهای نوع عددی مقدار صفر و اشیا مقدار null دریافت می‌کنند)

منابع[ویرایش]