extern স্টোরেজ ক্লাস স্পেসিফায়ারটি আপনাকে এমন অবজেক্ট ডিক্লেয়ার করতে দেয় যা একাধিক সোর্স ফাইল ব্যবহার করতে পারে। একটি extern ডিক্লেয়ারেশন বর্তমান সোর্স ফাইলের পরবর্তী অংশে ভেরিয়েবলটি ব্যবহারযোগ্য করে তোলে। এই ডিক্লেয়ারেশন ডেফিনিশনকে প্রতিস্থাপন করে না। এটি এক্সটার্নালি ডিফাইন করা ভেরিয়েবলটি বর্ণনা করার জন্য ব্যবহৃত হয়।
একটি extern ডিক্লেয়ারেশন ফাংশনের বাইরে বা একটি ব্লকের শুরুতে প্রদর্শিত হতে পারে। যদি ডিক্লেয়ারেশনটি একটি ফাংশন বর্ণনা করে বা একটি ফাংশনের বাইরে থাকা অবজেক্টকে এক্সটার্নাল লিংকেজ সহ বর্ণনা করে, তবে extern কিওয়ার্ডটি ঐচ্ছিক।
যদি একটি আইডেন্টিফায়ারের জন্য ফাইল স্কোপে ইতিমধ্যে একটি ডিক্লেয়ারেশন বিদ্যমান থাকে, তবে একটি ব্লকের মধ্যে পাওয়া সেই আইডেন্টিফায়ারের যেকোনো extern ডিক্লেয়ারেশন সেই একই অবজেক্টকে বোঝায়। যদি ফাইল স্কোপে আইডেন্টিফায়ারের জন্য অন্য কোনো ডিক্লেয়ারেশন না থাকে, তবে আইডেন্টিফায়ারটির এক্সটার্নাল লিংকেজ থাকে।
C++ extern স্টোরেজ ক্লাস স্পেসিফায়ারের ব্যবহারকে অবজেক্ট বা ফাংশনের নামগুলোর সাথে সীমাবদ্ধ করে। টাইপ ডিক্লেয়ারেশনের সাথে extern স্পেসিফায়ার ব্যবহার করা غيرقانونিক। একটি extern ডিক্লেয়ারেশন ক্লাস স্কোপে প্রদর্শিত হতে পারে না।
ফাইল জুড়ে ভেরিয়েবল শেয়ার করার জন্য extern কিওয়ার্ডটি নিম্নলিখিতভাবে ব্যবহার করা যায়:
file3.h
extern int global_variable; /* ভেরিয়েবলের ডিক্লেয়ারেশন */
file1.c
#include "file3.h" /* এখানে ডিক্লেয়ারেশন উপলব্ধ */
#include "prog1.h" /* ফাংশন ডিক্লেয়ারেশন */
/* এখানে ভেরিয়েবল ডিফাইন করা হয়েছে */
int global_variable = 37; /* ডেফিনিশন ডিক্লেয়ারেশনের সাথে যাচাই করা হয়েছে */
int increment(void) {
return global_variable++;
}
file2.c
#include "file3.h"
#include "prog1.h"
#include <stdio.h>
void use_it(void) {
printf("Global variable: %d\n", global_variable++);
}
Stack Overflow-এ নিচের প্রশ্নটি extern কিওয়ার্ডের সারথাকে সম্পূর্ণরূপে ধারণ করে: https://stackoverflow.com/questions/1433204/how-do-i-use-extern-to-share-variables-between-source-files