Saya sedang membaca "Think in C ++" dan itu baru saja memperkenalkan extern
deklarasi. Sebagai contoh:
extern int x;
extern float y;
Saya pikir saya mengerti artinya (deklarasi tanpa definisi), tapi saya bertanya-tanya kapan itu terbukti bermanfaat.
Adakah yang bisa memberikan contoh?
c++
variable-declaration
Aslan986
sumber
sumber
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
.Jawaban:
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 yangint
dipanggilx
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, definisix
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 tanpastatic
kata kunci.tajuk:
sumber 1:
sumber 2:
sumber
Ini berguna ketika Anda membagikan variabel di antara beberapa modul. Anda mendefinisikannya dalam satu modul, dan menggunakan eksternal dalam yang lain.
Sebagai contoh:
di file1.cpp:
di file2.cpp:
sumber
global_int
ada di ruang nama global, jika saya menggunakannya di file2.cpp di beberapa bagian ruang nama saya harus ruang lingkup yang benar? yaitunamespace XYZ{ void foo(){ ::global_int++ } };
abc.h
, ada kemungkinan ia akan didefinisikanabc.cpp
. IDE yang baik akan selalu membantu, tetapi kode yang terorganisir dengan baik selalu merupakan solusi yang lebih baik.extern
di file2.cpp, masih dapat mengaksesglobal_int
setelah menyertakan. mengapa saya harus memilikinya?Ini semua tentang hubungan .
Jawaban sebelumnya memberikan penjelasan yang bagus tentang
extern
.Tapi saya ingin menambahkan poin penting.
Anda bertanya tentang
extern
di C ++ tidak di C dan saya tidak tahu mengapa tidak ada jawaban yang menyebutkan tentang kasus ini ketikaextern
datang denganconst
di C ++.Dalam C ++, suatu
const
variabel memiliki tautan internal secara default (tidak seperti C).Jadi skenario ini akan menyebabkan kesalahan penautan :
Sumber 1:
Sumber 2:
Itu harus seperti ini:
Sumber 1:
Sumber 2:
sumber
extern
dalam definisi? Anda dapat melakukannya dengan mencetak nilaiglobal
dalam sumber 2.extern
dihilangkan dalamconst int global = 255;
.Ini berguna ketika Anda ingin memiliki variabel global. Anda mendefinisikan variabel global dalam beberapa file sumber, dan mendeklarasikannya di luar dalam file header sehingga setiap file yang menyertakan file header itu kemudian akan melihat variabel global yang sama.
sumber