Wanneer extern gebruiken in C++

Ik lees “Think in C++” en het heeft zojuist de extern-declaratie geïntroduceerd. Bijvoorbeeld:

extern int x;
extern float y;

Ik denk dat ik de betekenis begrijp (verklaring zonder definitie), maar ik vraag me af wanneer het nuttig blijkt te zijn.

Kan iemand een voorbeeld geven?


Antwoord 1, autoriteit 100%

Dit is handig als je globale variabelen hebt. Je declareert het bestaan van globale variabelen in een header, zodat elk bronbestand dat de header bevat hiervan op de hoogte is, maar je hoeft het maar één keer te ‘definiëren’ in een van je bronbestanden.

Ter verduidelijking, het gebruik van extern int x; vertelt de compiler dat een object van het type int genaamd x ergens Het is niet de taak van de compiler om te weten waar het bestaat, het moet alleen het type en de naam weten, zodat het weet hoe het het moet gebruiken. Zodra alle bronbestanden zijn gecompileerd, zal de linker alle verwijzingen van x omzetten naar die ene definitie die hij vindt in een van de gecompileerde bronbestanden. Om het te laten werken, moet de definitie van de variabele x hebben wat externe koppeling wordt genoemd, wat in feite betekent dat het buiten een functie moet worden gedeclareerd (op wat gewoonlijk het bestandsbereik wordt genoemd ) en zonder het trefwoord static.

kop:

#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

bron 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();
}

bron 2:

#include <iostream>
#include "header.h"
void print_global_x()
{
    //print global_x here:
    std::cout << global_x << std::endl;
}

Antwoord 2, autoriteit 34%

Het is handig wanneer u een variabele tussen een paar modules deelt. Je definieert het in de ene module en gebruikt extern in de andere.

Bijvoorbeeld:

in bestand1.cpp:

int global_int = 1;

in file2.cpp:

extern int global_int;
//in some function
cout << "global_int = " << global_int;

Antwoord 3, autoriteit 12%

Het draait allemaal om de koppeling.

De vorige antwoorden gaven goede uitleg over extern.

Maar ik wil een belangrijk punt toevoegen.

Je vraagt ​​naar extern in C++ niet in C en ik weet niet waarom er geen antwoord is over het geval wanneer extern wordt geleverd met const in C++.

In C++ heeft een variabele const standaard een interne koppeling (niet zoals C).

Dus dit scenario leidt tot koppelingsfout:

Bron 1:

const int global = 255; //wrong way to make a definition of global const variable in C++

Bron 2:

extern const int global; //declaration

Het moet zo zijn:

Bron 1:

extern const int global = 255; //a definition of global const variable in C++

Bron 2:

extern const int global; //declaration

Antwoord 4, autoriteit 2%

Dit is handig als u een globale variabele wilt hebben. U definieert de globale variabelen in een bronbestand en declareert ze extern in een headerbestand, zodat elk bestand dat dat headerbestand bevat dezelfde globale variabele zal zien.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

eight + thirteen =

Other episodes