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

C++-এ extern "C" এর প্রভাব: নাম मैंگلিং বন্ধ করা

C++-এ ফাংশন ওভারলোডিং সাপোর্ট করার জন্য কম্পাইলার ফাংশন নাম ম্যাংگل (mangle) করে - আর্গুমেন্ট টাইপ ইনফো যোগ করে। C ভাষা ওভারলোডিং সাপোর্ট করে না, তাই নাম পরিবর্তন হয় না। C++-এ C লাইব্রেরি কল করার জন্য নাম ম্যাংgling বন্ধ করতে extern "C" ব্যবহার করা হয়।

নেম ম্যাংgling উদাহরণ

int func(int x) { return x*x; }
double func(double x) { return x*x; }

// কম্পাইলার এটি রূপান্তর করতে পারে:
int __func_i(int x) { return x*x; }
double __func_d(double x) { return x*x; }

প্রব্লেম: C ফাংশন কল

int printf(const char* format, ...); // C ফাংশন
int main() { printf("Hello"); } // Linker error: mangled name not found

সমাধান: extern "C"

extern "C" {
    int printf(const char* format, ...); // নাম ম্যাংল হবে না
}
int main() { printf("Hello World"); } // OK

আউটপুট

Hello World

নियम

  • extern "C" ব্লকের ভেতরের ফাংশন/ভেরিয়েবল C লিঙ্কেজ পায় (নো ম্যাংgling)।
  • নেমস্পেস স্কোপেই ব্যবহার করতে হয় (ক্লাস মেম্বার নয়)।
  • ক্লাস মেম্বার ফাংশনে extern "C" প্রয়োগ করা যায় না (ইগনোর হয়)।
  • হেডার ফাইলে ব্যবহার করলে #ifdef __cplusplus গার্ড দিন।

হেডার ফাইলে সঠিক প্যাটার্ন

// mylib.h
#ifdef __cplusplus
extern "C" {
#endif

void c_function(int x);

#ifdef __cplusplus
}
#endif

নোট: এটি লিংকেজ স্পেসিফিকেশন, টাইপ চেকিং নয়। C++ কম্পাইলার C কোড কম্পাইল করছে না, শুধু নাম 그대로 রেখে লিংকিংয়ে সাহায্য করছে।

  1. উইন্ডোজে C++-এর জন্য সেরা IDE কী? (আলাদা লেখা)

  2. C++-এ extern স্টোরেজ ক্লাস

  3. C++-এ const কিওয়ার্ড কী?

  4. C++ শিখতে ভালো রিসোর্সগুলো কী?