Ini berguna ketika Anda memiliki variabel global. Anda mendeklarasikan keberadaan variabel global dalam header, sehingga setiap file sumber yang menyertakan header tahu tentang itu, tetapi Anda hanya perlu "mendefinisikan" sekali dalam salah satu file sumber Anda.
Untuk memperjelas, menggunakan extern int x;
memberitahu kompiler bahwa objek jenis yang int
dipanggil x
ada di suatu tempat . Ini bukan pekerjaan kompiler untuk mengetahui di mana ia ada, ia hanya perlu mengetahui jenis dan namanya sehingga ia tahu cara menggunakannya. Setelah semua file sumber dikompilasi, linker akan menyelesaikan semua referensix
definisi yang ditemukan di salah satu file sumber yang dikompilasi. Agar dapat berfungsi, definisi x
variabel perlu memiliki apa yang disebut "hubungan eksternal", yang pada dasarnya berarti harus dinyatakan di luar fungsi (pada apa yang biasanya disebut "ruang lingkup file") dan tanpa static
kata kunci.
tajuk:
#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
sumber 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();
}
sumber 2:
#include <iostream>
#include "header.h"
void print_global_x()
{
//print global_x here:
std::cout << global_x << std::endl;
}
extern
pada beberapa kesempatan. Alat Microsoft menghasilkan kesalahan tautan untuk simbol yang hilang ketika tabel di file sumber lain hanya didefinisikan. Masalahnya adalah, tabelnya adalahconst
dan kompiler C ++ mempromosikannya kestatic
dalam unit terjemahan. Lihat, misalnya,ariatab.cpp
dankalynatab.cpp
.