Salve a tutti, stavo approfondendo il discorso delle variabili globali circa le funzioni e mi è sorto questo dubbio, spero riusciate ad aiutarmi.
Da ciò che ho capito sulle variabili globali, sono variabili visibili ed utilizzabili da tutte le funzioni del programma, il cui valore viene mantenuto integro per tutta l'esecuzione del programma. Il mio dubbio ricade sul prefisso extern, da quello che ho letto si indica il prefisso extern quando utilizzo delle funzioni (che usufruiscono di questa variabili esterna) la cui implementazione è stata sviluppata in un altro sorgente, "per dire alle suddette funzioni che quella variabile con cui devono lavorare è per l'appunto esterna"
Però provando a compilare i 2 sorgenti che seguono, anche se non indico il prefisso extern nel secondo sorgente ( quello che contiene l'implementazione delle funzioni), la compilazione va a buon fine quindi il programma funziona a dovere:
Sorgente 1:
#include<stdio.h>
void azzera();
void somma(double v);
void sottrai(double v);
void moltiplica(double v);
void dividi(double v);
double valore_corrente;
int main (int argc, char *argv[]){
azzera();
somma(5);
somma(27);
sottrai(4);
moltiplica(3);
dividi(7);
printf("Valore corrente: %5.3f \n",valore_corrente);
return 0;
}
void azzera(){
valore_corrente = 0;
}
void somma(double v){
valore_corrente += v;
}
void sottrai(double v){
valore_corrente -= v;
}
Sorgente 2:
#include<stdio.h>
extern double valore_corrente; //Se sostituisco con " double valore_corrente " funziona ugualmente
void moltiplica(double v){
valore_corrente *= v;
}
void dividi(double v){
valore_corrente /= v;
}
La mia domanda quindi è: perchè se non indico il prefisso extern il programma viene compilato senza errori e funziona a dovere ?
Alla luce di tutto questo a che serve realemente il prefisso extern ?
Spero di essere stato chiaro, grazie per l'aiuto
P.S.
per compilare utilizzo GCC con il seguente comando:
gcc sorgente1.c sorgente2.c -o eseguibile