यह उपयोगी है जब आपके पास वैश्विक चर हैं। आप एक हेडर में वैश्विक चर के अस्तित्व की घोषणा करते हैं , ताकि प्रत्येक स्रोत फ़ाइल जिसमें हेडर शामिल है, इसके बारे में जानता है, लेकिन आपको केवल एक बार अपनी स्रोत फ़ाइलों में से एक को "परिभाषित" करने की आवश्यकता है।
स्पष्ट करने के लिए, का उपयोग कर 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
।