সি স্টোরেজ ক্লাস (C – Storage Classes)

সি স্টোরেজ ক্লাস  (C - Storage Classes):

                                            লিখেছেনঃ মোঃ আমিরুল ইসলাম (আরিফ)

ওয়েব ডিজাইনার অ্যান্ড ডেভেলপার

একটি স্টোরেজ ক্লাস বলতে বুঝায় যে একটি সি প্রোগ্রামের মধ্যে ভ্যেরিয়াবল অথবা ফাংশন এর নির্দিষ্ট লক্ষ এবং লাইফ-টাইম ।

একটি একটি সি প্রোগ্রামে যে গুলো টাইপ ব্যাবহার করা হয় তা হলঃ

  • auto
  • register
  • static
  • extern

 

অটো স্টোরেজ ক্লাস (The auto Storage Class):

সকল লোকাল ভ্যেরিয়াবলের জন্য অটো স্টোরেজ ক্লাস হল ডিফল্ট স্টোরেজ ক্লাস।

{   int mount;   auto int month;}

উদাহরণস্বরূপ উপরে একই স্টোরেজ ক্লাসের সঙ্গে দুটি ভেরিয়েবল, অটো শুধুমাত্র ফাংশন মধ্যে ব্যবহার হয়েছে।

যেমনঃ লোকাল ভ্যেরিয়াবল.

রেজিস্টার স্টোরেজ ক্লাস (The register Storage Class):

রেজিস্টার স্টোরেজ ক্লাস এটা লোকাল ভ্যেরিয়াবলকে সংজ্ঞায়িত করতে ব্যাবহার করা হয় যা র্যামের স্থলে জমা করা হয়। এর অর্থ, এই ভ্যেরিয়াবলের সর্বাধিক মাপ রেজিস্টারের আকারের (সাধারণত এক শব্দ) সমান এবং এটি আপ্লাইড ইউনারী 'ও' অপারেটর থাকতে পারে না. (এটি মেমরির অবস্থান না)

{   register int  miles;}

রেজিস্টার শুধু মাত্র ভ্যেরিয়াবলে ব্যাবহার করা উচিৎ যেন তা প্রয়োজনে দ্রুত অ্যাক্সেস করা যায়, যেমনঃ কাউন্টার। এটা উল্লেখ করা উচিৎ যে defining 'register' বলতে এটা বুঝায় না যে ভ্যেরিয়াবল রেজিস্টারে সেভ হবে। এটার মানে হচ্ছে একটি রেজিস্টার সংরক্ষিত হওয়াটা হার্ডওয়্যার ও বাস্তবায়ন সীমাবদ্ধতার  উপর নিরভর করবে ।

স্ট্যাটিক স্টোরেজ ক্লাস (The static Storage Class):

স্ট্যাটিক স্টোরেজ ক্লাস সংকলনকারীকে নির্দেশ করে প্রগ্রামের লাইফ টাইমের বদলে লোকাল ভ্যেরিয়াবলের অস্তিত্ব রাখতে এটা প্রতিটি সময় ভিতরে আনার এবং বাহিরে রাখার সুযোগ তৈরি করে ও বন্ধ করে।  স্ট্যাটিক পরিবর্তক ও গ্লোবাল ভেরিয়েবলে প্রয়োগ করতে পারে।

যখন এটি করা হয়, তখন ভেরিয়াবলের স্কোপে যে ফাইলটি ঘোষণা করা হবে তা সীমিত হবে ।

সি প্রোগ্রামে যখন ক্লাস ডাটা মেম্বারে স্ট্রাটিক ব্যাবহার করা হবে, তখন এটা যে মেম্বার এর মধ্যে শুধুমাত্র একটি কপি তার ক্লাসের সব অবজেক্ট দ্বারা ভাগ করা হবে।

 

#include <stdio.h> /* function declaration */void func(void); static int count = 5; /* global variable */ main(){   while(count--)   {      func();   }   return 0;}/* function definition */void func( void ){   static int i = 5; /* local static variable */   i++;    printf("i is %d and count is %d\n", i, count);}

 

আপনি এখন এই উধাহরনটি নাও বুজতে পারেন কারন আমি এটাতে ফাংশন এবং গ্লোবাল ভেরিয়াবল ব্যাবহার করেছি।  যা আমি বিস্তারিত বর্ণনা করিনি। তাই এখন এগিয়ে যাওয়ার জন্য, যদিও এটা আপনি পুরপুরি ভাবে না বুঝেন । যখন উপরের কোড গুলো প্রণীত ও অনুষ্ঠিত (compiled and executed)। তখন এটি নিম্নলিখিত ফলাফল সৃষ্টি করে:

i is 6 and count is 4i is 7 and count is 3i is 8 and count is 2i is 9 and count is 1i is 10 and count is 0

বাহ্যিক স্টোরেজ ক্লাস (The extern Storage Class):

বাহ্যিক স্টোরেজ ক্লাস (The extern Storage Class) টি ব্যাবহার করা হয় গ্লোবাল ভেরিয়াবলকে উল্লেখ করতে যেটা সকল প্রোগ্রাম ফাইল এ দৃশ্যমান । যখন আপনি এক্সট্রান স্টোরেজ ক্লাস ব্যাবহার করবেন ভেরিয়াবল সক্রিয় করা যাবে না। যাতে সব এটি ভেরিয়াবলের নাম নির্দেশ করতে পারে না, সংগ্রহস্থলের অবস্থান যা পূর্বে নির্ধারিত করা হয়েছে ।

যখন আপনার একাধিক ফাইল আছে এবং আপনি গ্লোবাল ভেরিয়াবল অথবা ফাংশন ডিফাইন করবেন, যা ব্যাবহার করা হবে অন্য ফাইলেও, তারপর এক্সট্রান ব্যাবহার করা হবে অন্য ফাইলে যা ভেরিয়াবল অথবা ফাংশনকে সংজ্ঞায়িত করার রেফারেন্সে । শুধুমাত্র বোঝার জন্য,  এক্সট্রান অন্য ফাইলের গ্লোবাল ভেরিয়াবল অথবা ফাংশন ঘোষণা (declare) করতে ব্যবহার করা হয়।

এক্সট্রান মডিফাইয়ার সবচাইতে বেসি ব্যাবহার করা হয় যখন সেখানে দুই বা ততোধিক ফাইল শেয়ার করে একই গ্লোবাল ভেরিয়াবল অথবা ফাংশন ।

উধারন স্বরূপঃ

First File: main.c

#includeint count;externvoid write_extern();main(){   count=5;   write_extern();}

Second File: support.c

#include <stdio.h> extern int count; void write_extern(void){   printf("count is %d\n", count);}এখানে, এক্সট্রান শব্দটি ব্যাবহার করা হয়েছে দ্বিতীয় ফাইল কাউন্ট ডিক্লেয়ার করতে যেখানে এটি প্রথম ফাইল এর সংজ্ঞা আছে, main.c. হিসাবে । এখন, এই দুটি ফাইল কম্পাইল:$gcc main.c support.c

Permanent link to this article: http://bangla.sitestree.com/%e0%a6%b8%e0%a6%bf-%e0%a6%b8%e0%a7%8d%e0%a6%9f%e0%a7%8b%e0%a6%b0%e0%a7%87%e0%a6%9c-%e0%a6%95%e0%a7%8d%e0%a6%b2%e0%a6%be%e0%a6%b8-c-storage-classes/