यह उपयोगी है जब आपके पास वैश्विक चर हैं। आप एक हेडर में वैश्विक चर के अस्तित्व की घोषणा करते हैं , ताकि प्रत्येक स्रोत फ़ाइल जिसमें हेडर शामिल है, इसके बारे में जानता है, लेकिन आपको केवल एक बार अपनी स्रोत फ़ाइलों में से एक को "परिभाषित" करने की आवश्यकता है।
स्पष्ट करने के लिए, का उपयोग कर extern int x;संकलक कि प्रकार का ऑब्जेक्ट बताता है intकहा जाता है xमौजूद है कहीं । यह जानने के लिए संकलक का काम नहीं है कि यह कहां मौजूद है, इसे केवल प्रकार और नाम जानने की जरूरत है ताकि यह जान सके कि इसका उपयोग कैसे करना है। एक बार सभी स्रोत फ़ाइलों को संकलित कर लेने के बाद, लिंकर xएक परिभाषा के सभी संदर्भों को हल करेगा जो इसे संकलित स्रोत फ़ाइलों में से एक में पाता है। इसे काम करने के लिए, xचर की परिभाषा को "बाहरी लिंकेज" कहा जाना चाहिए, जिसका मूल रूप से यह मतलब है कि इसे एक फ़ंक्शन के बाहर घोषित किया जाना चाहिए (जिसे आमतौर पर "फ़ाइल स्कोप" कहा जाता है) और staticकीवर्ड के बिना ।
शीर्ष लेख:
#ifndef HEADER_H
#define HEADER_H
// any source file that includes this will be able to use "global_x"
extern int global_x;
void print_global_x();
#endif
स्रोत 1:
#include "header.h"
// since global_x still needs to be defined somewhere,
// we define it (for example) in this source file
int global_x;
int main()
{
//set global_x here:
global_x = 5;
print_global_x();
}
स्रोत 2:
#include <iostream>
#include "header.h"
void print_global_x()
{
//print global_x here:
std::cout << global_x << std::endl;
}
externकई मौकों पर एक परिभाषा प्रदान करनी है । Microsoft उपकरण अनुपलब्ध प्रतीकों के लिए एक लिंक त्रुटि उत्पन्न करते हैं जब किसी अन्य स्रोत फ़ाइल में तालिकाओं को केवल परिभाषित किया गया था। समस्या यह थी, तालिका थीconstऔर सी ++ संकलक नेstaticअनुवाद इकाई में इसे बढ़ावा दिया । उदाहरण के लिए देखें,ariatab.cppऔरkalynatab.cpp।