সি প্রোগ্রামিং এইচটিএমএল সিএসএস জাভাস্ক্রিপ্ট পিএইচপি এসকিউএল
ফোরাম
×

 সি টিউটোরিয়াল

সি প্রোগ্রামিং কি? সি এর ইতিহাস সি এর বৈশিষ্ট্যসমূহ কেন সি শিখবেন? সি ইন্সটলেশন প্রথম সি প্রোগ্রাম সি প্রোগ্রামের ফ্লো প্রোগ্রামিং শেখার সঠিক পদ্ধতি সি কীওয়ার্ড সি আইডেন্টিফায়ার সি ভ্যারিয়েবল সি কনস্ট্যান্ট সি ডাটা টাইপ সি মোডিফায়ার সি ইনপুট/আউটপুট সি অপারেটর সি কমেন্ট সি অপারেটর অগ্রাধিকার

সি কন্ট্রোল স্টেটমেন্ট

সি ইফ সি ইফ...ইলস সি ফর লুপ সি হোহাইল লুপ সি ডু...হোহাইল লুপ সি ব্রেক সি কন্টিনিউ সি সুইচ স্টেটমেন্ট সি goto স্টেটমেন্ট

 সি ফাংশন

সি ফাংশন পরিচিতি সি ইউজার কর্তৃক ফাংশন সি ফাংশন টাইপ সি রিকার্সন সি ভ্যারিয়েবল স্কোপ

 সি অ্যারে

সি অ্যারে পরিচিতি সি মালটি-ডাইমেনশনাল অ্যারে সি অ্যারে ফাংশন

 সি স্ট্রিং

সি স্ট্রিং সি স্ট্রিং ফাংশন

 সি পয়েন্টার

সি পয়েন্টার পরিচিত সি পয়েন্টার অ্যারে সি পয়েন্টার ফাংশন সি মেমোরি ম্যানেজমেন্ট

 সি ফাইল এবং স্ট্রাকচার

স্ট্রাকচার পরিচিত স্ট্রাকচার ও পয়েন্টার সি স্ট্রাকচার ও ফাংশন সি ইউনিয়ন ফাইল হ্যান্ডেলিং

 সি অতিরিক্ত টিউটোরিয়াল

সি লাইব্রেরী সি প্রিপ্রোসেসর এবং ম্যাক্রো সি ইনুমিরেশন সি এরর নিয়ন্ত্রণ সি টাইপ কাস্টিং সি বিট ফিল্ড সি ভ্যারিয়েবল আর্গুমেন্ট সি কমান্ড লাইন আর্গুমেন্ট

 

ভ্যারিয়েবলের স্কোপ এবং লাইফটাইম


এই অধ্যায়ে আপনি লোকাল(local) এবং গ্লোবাল (global) ভ্যারিয়েবলের স্কোপ(scope) এবং লাইফটাইম(lifetime) সম্মন্ধে জানবেন। এছাড়া স্ট্যাটিক(static) এবং রেজিস্টার(register) ভ্যারিয়েবল সম্বন্ধেও জানবেন।

সি প্রোগ্রামিং এ প্রতিটি ভ্যারিয়েবলের দুটি বৈশিষ্ট্য থাকে। যথাঃ

  1. টাইপ
  2. স্টোরেজ ক্লাস

টাইপ দ্বারা ভ্যারিয়েবলের ডাটা টাইপকে বুঝায় এবং স্টোরেজ ক্লাস ভ্যারিয়েবলের স্কোপ এবং লাইফটাইম নির্ধারন করে।

সি প্রোগ্রামিং এ চার ধরনের স্টোরেজ ক্লাস আছে।

  1. অটোম্যাটিক-automatic
  2. এক্সটার্নাল-external
  3. স্ট্যাটিক-static
  4. রেজিস্টার-register

লোকাল ভ্যারিয়েবল

ফাংশনের মধ্যে ডিক্লেয়ার করা ভ্যারিয়েবল-সমূহকে অটোম্যাটিক বা লোকাল ভ্যারিয়েবল বলা হয়।

লোকাল ভ্যারিয়েবল-সমূহ শুধুমাত্র ফাংশনের মধ্যে বিদ্যমান থাকে। ফাংশনের কাজ সম্পন্ন হয়ে গেলে লোকাল ভ্যারিয়েবল খতম হয়ে যায়।

int main() {
    int num; // এখানে num হলো main() ফাংশনের লোকাল ভ্যারিয়েবল
    ... .. ...
}

void add() {
   int num1; // এখানে num1 হলো add() ফাংশনের লোকাল ভ্যারিয়েবল
   ... .. ...

}

গ্লোবাল ভ্যারিয়েবল

ফাংশনের বাহিরে ডিক্লেয়ার করা ভ্যারিয়েবল-সমূহকে গ্লোবাল বা এক্সটার্নাল ভ্যারিয়েবল বলা হয়। যেকোনো ফাংশন থেকে গ্লোবাল বা এক্সটার্নাল ভ্যারিয়েবল-সমূহকে এক্সেস করা যায়।


উদাহরনঃ গ্লোবাল ভ্যারিয়েবল

#include <stdio.h>
void display();

int count = 3;  // গ্লোবাল ভ্যারিয়েবল

int main()
{
    //count ভ্যারিয়েবলকে  main() ফাংশনে ডিক্লেয়ার করা হয় নি
    ++count;     
    display();
    return 0;
}

void display()
{
    // count ভ্যারিয়েবলকে  display() ফাংশনে ডিক্লেয়ার করা হয় নি
    ++count;     
    printf("count = %d", count);
}

আউটপুট

count = 5

extern কিওয়ার্ড

ধরুন, একটি গ্লোবাল ভ্যারিয়েবলকে file1 এ ডিক্লেয়ার করা হয়েছে। আপনি যদি ভিন্ন আরেকটি ফাইল file2 থেকে ঐ ভ্যারিয়েবলকে এক্সেস করতে চান তাহলে কম্পাইলার অভিযোগ করবে।

এই সমস্যা সমাধানের জন্য file2 তে extern কীওয়ার্ড ব্যবহার করা হয় যা ফাইলকে নির্দেশ করে যে, এক্সটার্নাল ভ্যারিয়েবলকে ভিন্ন কোনো ফাইলে ডিক্লেয়ার(declare) করা হয়েছে।


রেজিস্টার ভ্যারিয়েবল

সি প্রোগ্রামিং এ রেজিস্টার ভ্যারিয়েবল ডিক্লেয়ারের জন্য register কীওয়ার্ড ব্যবহৃত হয়। রেজিস্টার ভ্যারিয়েবলকে লোকাল ভ্যারিয়েবলের তুলনায় দ্রুত গতির মনে করা হয়।

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

সম্প্রসারিত সিস্টেমে ব্যবহৃত এপ্লিকেশনের জন্য কোড কিভাবে অপটিমাইজ করতে হয় তা পূর্বে থেকে জানা না থাকলে রেজিস্টার ভ্যারিয়েবল ব্যবহারের কোনো প্রয়োজন নাই।


স্ট্যাটিক ভ্যারিয়েবল

সি প্রোগ্রামিং এ স্ট্যাটিক static ব্যবহৃত হয়। উদাহরণস্বরূপঃ

static int age; 

প্রোগ্রামে যখন ফাংশনের কাজ শেষ হয়ে যায় তখন এর সঙ্গে এর ভেতরের লোকাল ভ্যারিয়েবল গুলোও নিঃশেষ হয়ে যায়। প্রোগ্রাম শেষ না হওয়া পর্যন্ত কোনো লোকাল ভ্যারিয়েবলকে জীবিত রাখার জন্য static কীওয়ার্ড ব্যবহৃত হয়।

প্রোগ্রাম শেষ না হওয়া পর্যন্ত স্ট্যাটিক ভ্যারিয়েবলের ভ্যালু বিদ্যমান থাকে।


উদাহরনঃ স্ট্যাটিক ভ্যারিয়েবল

#include <stdio.h>
void display();

int main()
{
    display();
    display();
}
void display()
{
    static int count = 0;
    printf("%d  ",count);
    count += 10;
}

আউটপুট

0  
10

প্রথম ফাংশন কলে count ভ্যারিয়েবলের ভ্যালু 0 ছিল , দ্বিতীয় ফাংশন কলে এর ভ্যালু বৃদ্ধি হয়ে 10 হয়।

দ্বিতীয় ফাংশন কলের সময় count ভ্যারিয়েবলের ভ্যালু পূনরায় 0 এসাইন হয় না। কারণ count এখানে স্ট্যাটিক ভ্যারিয়েবল। অবশেষে 10 স্ক্রিনে প্রদর্শিত হয়।