GNU/Linux >> Linux Esercitazione >  >> Linux

Esercitazione sulla programmazione C Linux Parte 10 - Ambiti variabili

Se stai seguendo la nostra serie di tutorial di programmazione C, dovresti essere a conoscenza del concetto di variabili. Anche se abbiamo discusso le basi delle variabili, c'è un altro aspetto importante relativo alle variabili di cui parleremo qui:ambito delle variabili .

Iniziamo con il codice di scambio dei valori che abbiamo usato in uno dei nostri tutorial precedenti:

#include <stdio.h>

void swap (int val1, int val2)
{
int temp = 0;

temp = val1;
val1 = val2;
val2 = temp;

printf("\nSwapped values are: %d and %d", val1,val2);

}

int main()
{
int a=0, b=0;

printf("Enter two integer values\n");

scanf("%d %d",&a,&b);

printf("Entered values are: %d and %d", a,b);

swap(a,b);

return 0;
}

Qui, in questo pezzo di codice, le variabili "val1" e "val2" hanno un ambito locale, il che significa che prendono vita quando viene chiamata la funzione "swap" e muoiono non appena la chiamata a "swap" è terminata. Semplicemente non puoi accedere a "val1" e "val2" prima o dopo la chiamata alla funzione "swap". Allo stesso modo, anche l'ambito delle variabili 'a' e 'b' è locale - locale per la funzione 'main'.

Nota che queste variabili di ambito locale sono anche conosciute come variabili automatiche.

Ora, mentre le variabili con ambito locale sono limitate al blocco in cui sono dichiarate, esiste un altro tipo di variabili il cui ambito è globale. Come suggerisce il nome, le variabili di ambito globale possono essere utilizzate tra le funzioni. Ad esempio, la variabile 'var' è una variabile intera globale e può essere utilizzata in entrambe le funzioni 'main' e 'swap'.

#include <stdio.h>

int var;

void swap (int val1, int val2)
{
int temp = 0;

temp = val1;
val1 = val2;
val2 = temp;

printf("\nSwapped values are: %d and %d", val1,val2);

}

int main()
{
int a=0, b=0;

printf("Enter two integer values\n");

scanf("%d %d",&a,&b);

printf("Entered values are: %d and %d", a,b);

swap(a,b);

return 0;
}

Per impostazione predefinita, il valore '0' è assegnato alle variabili globali. Ma questo non è il caso delle variabili locali:è necessario assegnare loro un valore quando vengono definite, altrimenti contengono un valore spazzatura. Ad esempio, nel seguente programma:

#include <stdio.h>

int var;

int main()
{
int a;

printf("Local variable 'a' currently holds: %d", a);

printf("\n Global variable var currently holds: %d", var);


return 0;
}

Ci sono alte probabilità che otterrai un valore diverso da zero per 'a'. 'var' d'altra parte, sarà sempre zero all'inizio.

Andando avanti, possono esserci variabili globali e locali con lo stesso nome? Ebbene, la risposta è sì. Ok, allora cosa produrrà in output il seguente pezzo di codice:

#include <stdio.h>

int var = 5;

int main()
{
int var = 10;

printf("Local variable 'a' currently holds: %d", var);

printf("\n Global variable var currently holds: %d", var);


return 0;
}

Bene, l'output sarà "10" in entrambi i casi. Il motivo è che la variabile locale 'var' sovrascriverà la 'var' globale. Quindi ora la prossima domanda logica è:come accedere alla "var" globale all'interno di "main" in questo caso? Purtroppo, la risposta è NO. In effetti, dovresti evitare di entrare in situazioni come queste quando lavori con il linguaggio C.

Poi viene il concetto di variabili "esterne". In parole povere, usando la parola chiave 'extern' con qualsiasi dichiarazione di variabile, stai dicendo al compilatore che questa variabile è già dichiarata/definita da qualche altra parte e la stiamo solo usando qui. Ad esempio, nella parte di codice seguente, il compilatore non sa che 'var' esiste quando tenta di compilare l'istruzione printf all'interno della funzione principale.

#include <stdio.h>

int main()
{

printf("\n Global variable var currently holds: %d", var);


return 0;
}

int var = 5;

Ecco perché durante la compilazione viene visualizzato un errore simile al seguente:

main.c: In function ‘main’:
main.c:14:58: error: ‘var’ undeclared (first use in this function)
printf("\n Global variable var currently holds: %d", var);
^
main.c:14:58: note: each undeclared identifier is reported only once for each function it appears in

Ma se dichiari 'var' come extern qui, vedrai che tutto funziona bene. Questo perché il compilatore alla fine arriva alla dichiarazione 'var' originale.

#include <stdio.h>

int main()
{
extern int var;

printf("\n Global variable var currently holds: %d", var);


return 0;
}

int var = 5;

E ottieni l'output corretto:

Global variable var currently holds: 5

Quindi è così che funziona l'esterno. Le variabili esterne vengono spesso utilizzate quando il programma/progetto è suddiviso su più file di codice sorgente e si desidera, ad esempio, utilizzare in 'file1' una variabile definita in 'file2'.

E infine, poiché stiamo discutendo degli ambiti delle variabili, sarebbe meglio se discutessimo anche qui delle variabili "statiche". Le variabili statiche sono speciali nel senso che mantengono il loro valore anche dopo essere uscite dall'ambito. Ciò significa che vengono inizializzati solo una volta, che è la prima volta.

static int counter 

Di seguito è riportato un pezzo di codice che utilizza una variabile statica per contare il numero di volte in cui una funzione viene chiamata.

#include <stdio.h>

int swap (int val1, int val2)
{
static int counter = 1;
int temp = 0;

temp = val1;
val1 = val2;
val2 = temp;

printf("\n Function called %d times\n", counter);
counter++;
}

int main()
{
int a=9, b=4;

swap(a,b);
swap(a,b);
swap(a,b);

return 0;
}

Ecco l'output:

 Function called 1 times 

Function called 2 times

Function called 3 times

Quindi puoi vedere, la variabile 'counter' ha mantenuto il suo valore anche dopo essere uscita dall'ambito. Proprio come le variabili globali, anche le variabili statiche hanno un valore predefinito di '0'.

In questo tutorial, abbiamo discusso diversi concetti importanti, tutti relativi all'ambito delle variabili nel linguaggio di programmazione C. Non dimenticare di creare i tuoi programmi per comprendere meglio la differenza tra variabili esterne, statiche, globali e locali. E come sempre, in caso di dubbi o domande, lascia un commento qui sotto.


Linux
  1. C Tutorial di programmazione 4 - Variabili e memoria

  2. Tutorial di programmazione C Parte 3 - Nozioni di base sulle variabili

  3. Esercitazione sulla programmazione C Linux Parte 12 - Operatori di assegnazione ed espressioni condizionali

  4. Esercitazione sulla programmazione C Linux Parte 11 - Operatori aritmetici, relazionali e logici

  5. Esercitazione sulla programmazione in Linux C Parte 15 - Complemento a 2 secondi e numeri negativi

Esempi di comandi curl Linux – Parte 2

Esempi di comandi curl Linux – Parte 1

Tutto è un file in Linux – Parte 2

Tutto è file in Linux – Parte 1

Installa il linguaggio di programmazione racket su Linux

Migliori pratiche di codifica per la programmazione di sistemi Linux in linguaggio C – Parte 1