কম্পিউটার

সি প্রোগ্রামে স্টোরেজ ক্লাস


ভেরিয়েবল এবং ডেটাটাইপগুলি উপরে আলোচনা করা হয়েছে। এখন আমরা দেখব কিভাবে ভেরিয়েবলকে এর সুযোগ এবং দৃশ্যমানতার দ্বারা শ্রেণীবদ্ধ করা যায়।

ব্যাপ্তি:সাধারণত, স্কোপ এমন একটি শব্দ যা একটি পরিবর্তনশীলের জীবনকাল নির্দেশ করে। এটি কতক্ষণ কাজ করবে এবং কখন এটি ধ্বংস হবে।

দৃশ্যমানতা :ভিজিবিলিটি দেখায় যেখান থেকে ভেরিয়েবলটি দৃশ্যমান, আমরা কোথায় ভেরিয়েবল ব্যবহার করতে পারি। উদাহরণ হিসেবে আমরা যদি স্থানীয় ভেরিয়েবল ব্যবহার করি তাহলে আমরা অন্য ফাংশন বা ফাইল থেকে এটি ব্যবহার করতে পারি না, তাই এটি শুধুমাত্র ব্লকের ভিতরেই দৃশ্যমান হয়।

ব্লক করুন :ব্লক দুটি কোঁকড়া বন্ধনীর মধ্যে লাইনের সেট হিসাবে সংজ্ঞায়িত করা হয় {…}। উদাহরণ হিসেবে

{
   //line1
   //line2
   //line3
}

এটি একটি ব্লক৷

স্টোরেজ ক্লাস কিভাবে ঘোষণা করেছে ব্যাপ্তি দৃশ্যমানতা
অটো বিশ্বব্যাপী

অটো স্থানীয়ভাবে ব্লক করুন ব্লক করুন
রেজিস্টার করুন বিশ্বব্যাপী

রেজিস্টার করুন স্থানীয়ভাবে ব্লক করুন ব্লক করুন
স্ট্যাটিক বিশ্বব্যাপী প্রোগ্রাম ফাইল
স্ট্যাটিক স্থানীয়ভাবে প্রোগ্রাম ব্লক করুন
বহিরাগত বিশ্বব্যাপী প্রোগ্রাম প্রোগ্রাম
বহিরাগত স্থানীয়ভাবে প্রোগ্রাম ব্লক করুন

স্টোরেজ ক্লাসের জন্য বেসিক সিনট্যাক্স:

<storage class> <datatype> variable_name;
ex. static int my_var = 0;

দ্রষ্টব্য:আমরা যদি variable_name এর মত ব্যবহার করি; কোনো স্টোরেজ ক্লাস নির্দিষ্ট না করে, এটি স্বয়ংক্রিয়ভাবে 'অটো' স্টোরেজ ক্লাস হবে।

স্বয়ংক্রিয়:অটো স্টোরেজ ক্লাস হল সমস্ত স্থানীয় ভেরিয়েবলের জন্য ডিফল্ট স্টোরেজ ক্লাস।

{
   int mount;
   auto int month;
}

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

নিবন্ধন করুন :রেজিস্টার স্টোরেজ ক্লাস স্থানীয় ভেরিয়েবলগুলিকে সংজ্ঞায়িত করতে ব্যবহৃত হয় যা RAM এর পরিবর্তে একটি রেজিস্টারে সংরক্ষণ করা উচিত। এর মানে হল যে ভেরিয়েবলের সর্বোচ্চ সাইজ রেজিস্টার সাইজের সমান (সাধারণত একটি শব্দ) এবং এটিতে unary '&' অপারেটর প্রয়োগ করা যাবে না (যেহেতু এটির মেমরির অবস্থান নেই)।

{
   register int miles;
}

রেজিস্টার শুধুমাত্র ভেরিয়েবলের জন্য ব্যবহার করা উচিত যেগুলির জন্য দ্রুত অ্যাক্সেসের প্রয়োজন যেমন কাউন্টার। এটিও উল্লেখ করা উচিত যে 'রেজিস্টার' সংজ্ঞায়িত করার অর্থ এই নয় যে পরিবর্তনশীলটি একটি রেজিস্টারে সংরক্ষণ করা হবে। এর মানে হল যে এটি হার্ডওয়্যার এবং বাস্তবায়ন সীমাবদ্ধতার উপর নির্ভর করে একটি রেজিস্টারে সংরক্ষণ করা যেতে পারে৷

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

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

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

উদাহরণ কোড


#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);
}

আউটপুট

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

বহিরাগত :বহিরাগত স্টোরেজ ক্লাস একটি গ্লোবাল ভেরিয়েবলের একটি রেফারেন্স দিতে ব্যবহৃত হয় যা সমস্ত প্রোগ্রাম ফাইলে দৃশ্যমান। আপনি যখন 'এক্সটার্ন' ব্যবহার করেন, তখন ভেরিয়েবলটি আরম্ভ করা যায় না, তবে এটি ভেরিয়েবলের নামটিকে আগে সংজ্ঞায়িত স্টোরেজ অবস্থানে নির্দেশ করে।

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

যখন নীচে ব্যাখ্যা করা হয়েছে একই গ্লোবাল ভেরিয়েবল বা ফাংশন ভাগ করে নেওয়া দুই বা ততোধিক ফাইল থাকে তখন বহিরাগত সংশোধকটি সাধারণত ব্যবহৃত হয়৷

উদাহরণ কোড (main.c):

#include <stdio.h>
int count ;
extern void write_extern();
main() {
count = 5;
write_extern();
}
Example Code (support.c):
#include <stdio.h>
extern int count;
void write_extern(void) {
printf("count is %d\n", count);
}

আউটপুট

count is 5

  1. C# এ নেস্টেড ক্লাস

  2. C# এ বিমূর্ত ক্লাস

  3. কিভাবে ক্লাস ভেরিয়েবল মাল্টি-উত্তরাধিকার পাইথন ক্লাসে কাজ করে?

  4. কেন আমরা ক্লাস তৈরি করব?