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++)