কম্পিউটার টিউটোরিয়াল

সি ভাষায় sizeof() এর ভেতরে লেখা কোড এক্সিকিউট হয় না

sizeof হলো একটি কম্পাইল-টাইম অপারেটর (কিছু الأحيان অপারেটর বলা হয়, ফাংশন নয়)। এর আর্গুমেন্ট হিসেবে যদি কোনো ফাংশন কল বা এক্সপ্রেশন দেওয়া হয়, তবে সেটি রান-টাইমে এক্সিকিউট হয় না — কম্পাইলার শুধু এক্সপ্রেশনের টাইপ দেখে এর সাইজ রিটার্ন করে।

উদাহরণ

#include <stdio.h>

double my_function() {
    printf("This is a test function");
    return 123456789;
}

int main() {
    int x;
    x = sizeof(printf("Hello World")); // printf এক্সিকিউট হবে না
    printf("The size: %d\n", x);
    x = sizeof(my_function());       // my_function এক্সিকিউট হবে না
    printf("The size: %d", x);
    return 0;
}

আউটপুট

The size: 4
The size: 8

ব্যাখ্যা

  • sizeof(printf("Hello World")): printf-র রিটার্ন টাইপ int (প্রিন্ট হওয়া ক্যারেক্টার কাউন্ট), সাইজ ৪ বাইট। "Hello World" প্রিন্ট হয়নি।
  • sizeof(my_function()): রিটার্ন টাইপ double, সাইজ ৮ বাইট। ফাংশন বডি এক্সিকিউট হয়নি।

কেন এটা জেনে রাখা দরকার?

  • যদি কেউ ভুলে sizeof(func()) লিখে ফাংশন কল করার আশা করে, তবে বাগ হবে
  • সাইড-ইফেক্ট যেকোনো এক্সপ্রেশন (যেমন x++, func()) sizeof-এ থাকলে সেটি হবে না
  • অপসিডেন্টালি sizeof(x++) লিখলে x ইনক্রিমেন্ট হবে না

সঠিক ব্যবহার

// ভালো: টাইপ বা ভেরিয়েবল দিয়ে sizeof
sizeof(int)
sizeof(x)
sizeof(arr)

// এড়িয়ে চলুন: ফাংশন কল বা সাইড-ইফেক্ট
sizeof(func())
sizeof(x++)
  1. C ভাষায় এক-মাত্রিক অ্যারে কী?

  2. C/C++-তে থ্রেড ফাংশন: pthread লাইব্রেরি ব্যবহার

  3. C প্রোগ্রামিং-এ পিরামিড প্যাটার্ন প্রিন্ট করা

  4. C প্রোগ্রামিং-এ নাম্বার প্যাটার্ন প্রিন্ট করা (দুই ধরনের প্যাটার্ন)