সি-স্টোরেজ ক্লাসেস ও প্রকারভেদ ~ C-Storage Classes & Types of Storage class in Bangla Tutorial - 09

সি-স্টোরেজ ক্লাসেস ~ C-Storage Classes in Bangla Tutorial - 09

সি-স্টোরেজ ক্লাসেস (C-Storage Classes):
একটা ভেরিয়েবল অথবা একটা ফাংশন কোন সীমার মাঝে ব্যবহার করা যাবে এবং কতক্ষণ সেই ভেরিয়েবল/ফাংশনটা কার্যকর থাকবে সেটা স্টোরেজ ক্লাস (Storage Class) দ্বারা নির্ধারিত হয়। সি প্রোগ্রামিং এ আমরা সাধারণত চার ধরনের স্টোরেজ (Storage Class) দেখতে পাই –
     ১। অটো (auto)
     ২। রেজিস্টার (register)
     ৩। স্ট্যাটিক (static)
     ৪। এক্সটার্ন (extern)

নিচের ছকটি  লক্ষ্য করে দেখঃ 

Storage Specifier 
Description
auto
Storage place: CPU Memory
Initial/default value: Garbage value
Scope: local
Life: Within the function only.
extern
Storage place: CPU memory
Initial/default value: Zero
Scope: Global
Life: Till the end of the main program. Variable definition might be anywhere in the C program.
static
Storage place: CPU memory
Initial/default value: Zero
Scope: local
Life: Retains the value of the variable between different function calls.
register
Storage place: Register memory
Initial/default value: Garbage value
Scope: local
Life: Within the function only.

অটোমেটিক স্টোরেজ (automatic storage):
যেসকল ভেরিয়েবল একটা ব্লকের মধ্যে নির্ধারণ করা হয়, তাদেরকে অটোমেটিক ভেরিয়েবল বলে।
সি-প্রোগ্রামিং এর নিয়ম অনুযায়ী সমস্ত লোকাল ভেরিয়েবল নিজে থেকেই আটোমেটিক হয়ে থাকে। আর অটোমেটিক স্টোরেজ ক্লাস হচ্ছে সব লোকাল ভেরিয়েবলের জন্য ডিফল্ট (default) স্টোরেজ ক্লাস। ভেরিয়েবল নির্ধারণ করার সময় auto কী-ওয়ার্ড লিখলেও চলে, না লিখলেও চলে –

#include<stdio.h>
int main()
{
     int x =10; // local variable (also automatic)
     auto int y = 20; //automatic variable
     printf("%d", y);
     return 0;
}

Output: 20

রেজিস্টার স্টোরেজ (register storage):
যেসকল ভেরিয়েবল একটা ব্লকের মধ্যে নির্ধারণ করা হয়, তাদেরকে লোকাল ভেরিয়েবল বলে।

সি-প্রোগ্রামিং এর নিয়ম অনুযায়ী সমস্ত লোকাল ভেরিয়েবল নিজে থেকেই আটোমেটিক হয়ে থাকে। আর অটোমেটিক স্টোরেজ ক্লাস হচ্ছে সব লোকাল ভেরিয়েবলের জন্য ডিফল্ট (default) স্টোরেজ ক্লাস। অনেক সময় দ্রুত হিসাব-নিকাশ সম্পন্ন করার জন্য আমরা যদি লোকাল ভেরিয়েবল্গুলো কম্পিউটারের র‌্যাম (RAM) এর পরিবর্তে রেজিস্টারে নির্ধারণ করে দিতে চাই তাহলে সেই কাজটি করে দেয় রেজিস্টার স্টোরেজ ক্লাস –

#include<stdio.h>
int main()
{
     int x =10; // local variable (also automatic)
     register int y = 20; // register variable
     printf("%d", y);
     return 0;
}

Output: 20

স্ট্যাটিক স্টোরেজ (static storage):
যে ভেরিয়েবল স্ট্যাটিক কী-ওয়ার্ড (keyword) দিয়ে নির্ধারণ করা হয়, তাকে স্ট্যাটিক ভেরিয়েবল বলে।

আর স্ট্যাটিক স্টোরেজ ক্লাস হচ্ছে সব স্ট্যাটিক ভেরিয়েবলের জন্য ডিফল্ট (default) স্টোরেজ ক্লাস।

#include<stdio.h>
int increment()
{
     static int num = 1; //static variable
     num++;
     return num;
}
int main()
{
     int x =10, f_incr, s_incr; // local variable
     f_incr = increment(); //function call
     printf("%d ", f_incr);
     s_incr = increment(); //function call
     printf("%d ", s_incr);
     return 0;
}
Output: 2 3

উপরের সোর্স কোডটি বিশ্লেষণ করলে দেখা যাবে যে, প্রথমবার increment() ফাংশনকে কল করার সময় int num = 1 দ্বারা পূর্ণসংখ্যা টাইপের একটি ভেরিয়েবল নির্ধারণ করা হয় যার মান হল ১,num ভেরিয়েবল যেহেতু স্ট্যাটিক হিসেবে বলে দেওয়া হয়েছে, সেহেতু প্রতিবার increment() ফাংশন কল করার সময় আর নতুন করে num ভেরিয়েবলের মান ১ নির্ধারিত হবে না। বরং, গত ফাংশন কলের পরে num ভেরিয়েবলের পরিবর্তিত মান-টিই থেকে যাবে। তাই প্রথমবার increment() ফাংশন কলের পরে num ভেরিয়েবলের মান হয়েছে ২,এরপর আবার কল করার পরে এটি হয়েছে ৩,num ভেরিয়েবল স্ট্যাটিক হিসেবে বলে দেওয়া না হলে কিন্তু এমনটা হতো না।

এক্সটার্নাল স্টোরেজ (external storage):
একটা সফটওয়্যারের প্রোগ্রামগুলো সাধারণত অনেকগুলো সোর্স ফাইলে লেখা হয়। ধরাযাক, একটা সোর্স ফাইলের প্রোগ্রামে নির্ধারিত কোন ভেরিয়েবল অন্য একটা সোর্স ফাইলের প্রোগ্রামে ব্যবহার করার প্রয়োজন পড়ল। তখন প্রথম সোর্স ফাইলে ভেরিয়েবলটি নির্ধারণ করার সময় আমরা extern কী-ওয়ার্ড ব্যবহার করবো যাতে করে সেই ভেরিয়েবলটা পরে অন্য কোন ফাইলে ব্যবহার করা যায়।
আর এক্সটার্নাল স্টোরেজ ক্লাস হচ্ছে সব এক্সটার্নাল ভেরিয়েবলের জন্য ডিফল্ট (default) স্টোরেজ ক্লাস।

 myfile.c
extern int x=10; //external variable (also global)
main_program.c
#include "myfile.h"
#include <stdio.h> 
void printValue()
{
     printf("External variable: %d", x);
}

Output: 10



0 Response to সি-স্টোরেজ ক্লাসেস ও প্রকারভেদ ~ C-Storage Classes & Types of Storage class in Bangla Tutorial - 09

Post a Comment