C++ Variable Scope

🔹 تعریف

  • Scope یعنی بخش از برنامه که یک متغیر قابل دسترسی است.

  • محدوده متغیر مشخص می‌کند کجا می‌توان مقدار آن را خواند یا تغییر داد.

🔹 انواع Scope

1️⃣ Local Scope (محلی)

  • متغیر داخل یک تابع یا بلوک {} تعریف شود.

  • فقط در همان تابع یا بلوک قابل دسترسی است.

#include <iostream> using namespace std; int main() { int x = 10; // local variable cout << x << endl; // OK } // cout << x << endl; // خطا! x خارج از بلوک در دسترس نیست

2️⃣ Global Scope (سراسری)

  • متغیر خارج از تمام توابع تعریف شود.

  • در تمام توابع بعد از تعریف قابل دسترسی است.

#include <iostream> using namespace std; int x = 100; // global variable void printX() { cout << x << endl; } int main() { printX(); // خروجی: 100 cout << x << endl; // خروجی: 100 }

3️⃣ Block Scope (بلوک)

  • متغیر داخل یک بلوک خاص {} تعریف شود.

  • فقط در همان بلوک قابل دسترسی است.

#include <iostream> using namespace std; int main() { int x = 5; { int x = 10; // block scope cout << x << endl; // خروجی: 10 } cout << x << endl; // خروجی: 5 }

4️⃣ Function Scope (تابع)

  • پارامترهای تابع و متغیرهای داخل تابع فقط در همان تابع معتبر هستند.

#include <iostream> using namespace std; void myFunc(int a) { int b = a + 5; cout << b << endl; } int main() { myFunc(10); // خروجی: 15 // cout << b; // خطا! b خارج از تابع در دسترس نیست }

5️⃣ Static Variables

  • با static می‌توان متغیر محلی را بین فراخوانی‌های تابع حفظ کرد.

#include <iostream> using namespace std; void counter() { static int count = 0; count++; cout << count << endl; } int main() { counter(); // 1 counter(); // 2 counter(); // 3 }

🔹 نکات مهم

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

  2. متغیرهای سراسری در تمام توابع بعد از تعریف در دسترس هستند.

  3. Static local variables مقدار خود را بین فراخوانی‌های تابع حفظ می‌کنند.

  4. همیشه سعی کنید از local variables استفاده کنید تا کد قابل مدیریت‌تر و امن‌تر باشد.