حوزه متغیرها (Scope)

متغیرهای محلی و سراسری، حوزه بلوک و دسترسی به متغیرها در C

حوزه (Scope) چیست؟

حوزه تعیین می‌کند یک متغیر در کدام بخش از برنامه قابل دسترسی باشد. در C دو نوع اصلی داریم: محلی و سراسری.

متغیرهای محلی (Local)

متغیرهایی که داخل تابع یا بلوک تعریف می‌شوند. فقط در همان محدوده قابل دسترسی‌اند:

void myFunction() {
    int x = 10;  // محلی - فقط داخل این تابع
    printf("%d", x);  // ✅ درست
}

int main() {
    myFunction();
    printf("%d", x);  // ❌ خطا! x اینجا شناخته نمی‌شود
}

متغیرهای سراسری (Global)

متغیرهایی که بیرون همه توابع تعریف می‌شوند و همه توابع به آن‌ها دسترسی دارند:

int counter = 0;  // سراسری

void increment() {
    counter++;  // تغییر متغیر سراسری
}

int main() {
    increment();
    increment();
    printf("%d", counter);  // 2
}

حوزه بلوک (Block Scope)

هر جفت آکولاد { } یک حوزه جدید می‌سازد:

int main() {
    int x = 10;

    if (x > 5) {
        int y = 20;  // فقط داخل این if
        printf("%d", x + y);  // ✅
    }

    printf("%d", y);  // ❌ خطا! y اینجا وجود ندارد
}

متغیر محلی هم‌نام با سراسری

متغیر محلی، سراسری هم‌نام را سایه‌گذاری (shadow) می‌کند:

int x = 100;  // سراسری

int main() {
    int x = 50;  // محلی - سراسری را می‌پوشاند
    printf("%d", x);  // 50
}

مقایسه محلی و سراسری

ویژگیمحلیسراسری
محل تعریفداخل تابع/بلوکبیرون همه توابع
دسترسیفقط همان محدودههمه‌جا
مقدار اولیهنامعتبر (garbage)خودکار صفر
حافظهاستک (موقت)تا پایان برنامه

بهترین شیوه‌ها

این مبحث بخشی از دوره آموزش کامل زبان C است.

ابزارهای مرتبط