03) Le variabili costanti e funzioni Globali Extern, Static ecc…

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
JehovaZorobabele
00lunedì 13 giugno 2016 18:16
Ripassiamo le cose del C ma troviamo cose nuove del C++ i dati primitivi variabili costanti




Le costanti sono come le variabili solo che sono dichiarate direttamente oltre il tipo il valore , la costante ha un valore fisso che non può più cambiare con il C prima dello standard si usava per
costruire una costante il #define  PGRECO 3.14  che è la stessa che ho usato nell’ ultimo mio
programma per la pulizia dello schermo #define cls  system (“cls”)  il #define  non nasconde una costante essa rimane fissa nell’ area della memoria dall’ inizio  fino alla fine del programma



Con il  C++  è stata creata ( e importata al  C standard) la costante che possiamo usarla come una variabile int a= 10; mentre con la costante si inserisce il nome  const int a = 10;  cosi si
specifica che questo numero rimane sempre fisso finche la costante o la variabile  ha il suo scope  questo solo per il C++  { lo scope è il corpo } lo scope è l’ utilizzo di un prodotto
variabile costante dentro il corpo di un programma  il corpo inizia con la prima graffa e finisce con la chiusura della stessa graffa questo è l’ INCAPSULAMENTO  

Una variabile o una costante automatica
viene inizializzata e vista solo dentro quel scope  se abbiamo dei if nidificati    1 if  (a…{ 2 if a… { 3 if a }}}  ogni a inizializzata usata è diversa dall’ altre anche se  la del  secondo if viene letto ovunque  dentro il suo scope,  le nuove inizializzazioni int a; sostituisce l’ altre. Con le costanti diversamente dal #define è possibile prendere il suo indirizzo di memoria con & e il suo puntatore * come viene effettuato con le variabili


Nel C++ le costanti devono sempre essere inizializzate con un valore const int a= 12;  dove questo numero 12 di a rimane sempre fisso i valori che la costante può prendere come le variabili sono i numeri decimali  , esadecimali e ottali sia interi che reali oppure possono essere anche di tipo carattere, se i primi numeri sono 0 zero o  0x il compilatore li interpreta come ottali con 0 e esadecimali con 0x zerox , nei numeri reali in virgola mobile è possibile inserire i punti decimali e le potenze esponenziali e o E  sia i punti del decimale che la dichiarazione dell’ esponente sono opzionali e o E dell’equazione significa <10 alla potenza di .. il numero che
segue > ovvero sposta la virgola di … esempio 12.30 = 1.230e1  e1 vuol dire il punto va spostato di un numero verso sinistra,  esempio 1230e-2  il punto è negativo va spostato di 2 verso destra   23E-4  =  0.0023   E-4 negativo il punto va spostato di 4 posizioni verso sinistra nei numeri possiamo inserire il suffisso se il numero è diverso da double  tipo standard,  oppure  float f o F,  long double con l o L  da usare alla fine come  12.30f   f è float e usa 4 byte contro  il double che usa 8 byte come il log double se si scrive dentro una costante un carattere  va usate con ‘ a ‘  const char ‘a’;  la costante abbiamo detto che rimane sempre fissa dentro il programma ma con il comando o meglio funzione   const_cast e  il comando volatile possiamo cambiare questi valori della costante di questo ne parleremo quando si parla del casting nel C era possibile scambiare un numero float in un numero int nelle normali variabili qui in C++ è possibile farlo sia sulle variabili che sulle costanti 


Quando si parla di funzioni variabili o costanti il compilatore deve allocare la memoria secondo
il tipo predefinito e secondo dove va inserita e come viene usata le variabili e costanti globali
sono definite prima del main  dove sono inseriti  i prototipi delle funzioni queste variabili o costanti o funzioni sono lette da tutte le parti del programma anche dentro le stesse funzioni , la loro vita finisce con la fine del programma intero  queste globali sono poste in una parte di memoria diversa dalle stesse locali , le variabili locali   sono quelle scritte sotto il main del C , mentre in C++ sono scritte dentro i diversi scope  {} pertanto le variabili o costanti locali possono essere scritte al volo dove serve meglio vicino l’ inizio della graffa oppure inserire i commenti che specifica cosa serve, se dobbiamo modificare il programma dopo mesi di non utilizzo per migliorarlo, espanderlo ecc… se questo programma è composto da centinaia di variabili è possibile ricordare per che cosa serve ?

Se usiamo le nostre variabili  costanti e funzioni all’ esterno del nostro file bisogna dichiarare queste con la parola chiave EXTERN  ecco come usare una funzione e una variabile
in un secondo file  nel collegamento dei file il compilatore deve capire che questa funzione o altro esiste ma altrove che ora non la vede in un programma formato da più file ci deve essere un solo file con dentro il main  qui dentro  prova è inserito il prototipo della
funzione  e la variabile con extern ,  tutto il corpo del programma lo inserisco tutto in una riga  :

//prova extern il file principale con il main interno   per i file globale la variabile globale è  
 //  dichiarata  prima del
main  e è extern   globale = 12 dopo la funzione func il valore cambia


#include<iostream> 

using namespace std;

extern int globale;      //dichiarazione extern della variabile globale e della funzione func()
extern void func (); 

int main ()   { globale = 12;   cout <<globale << endl  ;   func();  cout<<" "<< globale <<
endl;    system ( "pause" ); }



/*prova2  secondo file che usa la funzione e la variabile esterne dichiarate  in prova per usare la variabile globale deve essere di nuovo dichiarata altrimenti il compilatore non la riconosce il compilatore legge func()  ora prende il nuovo valore  "ciao >> 1001   47*/ 

#include <iostream>
using namespace std;

int globale; // anche qui deve essere dichiarata la variabile altrimenti il compilatore non la legge

void func ()
  {
      const i
nt c = 1001;       globale = 47;  cout << "ciao  >>  " << c; }


Su al primo passaggio ci restituisce il valore di globale 12  quando legge la funzione func() il suo valore cambia in 47 quando stampa con il prossimo cout  il valore cambia in 47



Le variabili locali già le abbiamo viste nel C  comunque sono automatiche  cosi la parola  chiave auto non serve usarla,  la variabile locale in C erano inserite sotto il main e tutte dovevano rimanere li sotto  ora è possibile in C++ inserirle ovunque prima che ci serve  e dentro ogni scope {} altrimenti non sono più lette se sono fuori dell’ ambito specificato 



Static con questa parola rendiamo una variabile o una funzione in modo statico cosa vuol dire ?
static ha 2 significati primo se una variabile dentro una funzione viene chiamata  questa ogni volta è inizializzata con lo stesso numero di partenza, invece  con static la variabile conserva l’ ultimo numero e inizia a contare da questo ultimo numero  queste costanti e variabili static è solo possibile utilizzarle solo dentro un blocco di una funzione Non è possibile
usare una variabile static esternamente dal file da dove si lavora il compilatore da errore effettivamente questo è anche il secondo significato( variabile static non utilizzabile fuori da questo scope {} ) 


Extern e static  serve al compilatore per capire che tipo di connessione
ha le variabili tra di loro esiste 2 tipi di connessione il linkage  internal o external  , il linkage è il linker che collega i file durante la compilazione per noi che usiamo Visual Studio , nel collegamento interno (linkage internal) che rappresenta solo 1 file il main non collegato ad altri
file, allora se trova una variabile static  o extern il compilatore non da problemi perché prima o poi troverà quello che cerca dentro il file Nel collegamento esterno (linkage extern) il
compilatore deve collegare le varie variabili e funzioni di tutti i file che abbiamo sia per le variabili static e per le costanti è meglio sempre dichiarale dentro lo stesso file o scope dove vengono usate altrimenti il  (compilatore)  fa problemi, in riguardo alle variabili automatiche ovvero  quelle locali non trova problemi perché non vengono collegate



Le variabili e le costanti le abbiamo di diversi tipi se noi usiamo un computer a 64 bit se si dice  int a = 3 ;  facilmente il computer utilizza il long  e in questo modo alloca moltissima memoria 8byte possiamo scrivere un numero di 17 cifre , se parliamo di eta possibile usare uno short e sfrutta 2 byte poi possiamo sfruttare il segno +- dei numeri lo short va da -32768 a 32767  ma se lo usiamo senza segno unsigned   cosi usiamo solo numeri positivi  va da 0 a 65535   ecco la lista di tutti i tipi che abbiamo a disposizione vedete in questa mia pagina ricopiata dalla guida in linea del VS :


http://im4.freeforumzone.it/up/49/34/3610422684.htm



Tutti questi tipi  sono disponibili sia per le variabili che le costanti  e per dire alle funzioni cosa
deve restituirci il nostro computer o il compilatore  deve sapere prima cosa deve memorizzare  se noi in un programma inseriamo un reale o una stringa  al posto di un intero può andare in tilt tutto il computer o programma  

 

Ciao grazie da ByMpt-Zorobabele

Testo PDF aggiornato con questo ultimo capitolo  inserito lo trovate :

http://www.freeforumzone.com/d/11266858/Elenco-figure-dei-comandi-della-programmazione-C-TESTO-PDF/discussione.aspx

Anche qui di queste discussioni che inserisco faccio un testo PDF da poter scaricare tutto il mio
materiale è da utilizzare come desiderate  per il testo PDF vedi cartella dedicata , ogni volta cambia ubicazione del testo  allora cambio il file e il testo lo inserisco dentro la cartella < file aggiornato ad oggi >


http://www.freeforumzone.com/d/11266858/Elenco-figure-dei-comandi-della-programmazione-C-TESTO-PDF/discussione.aspx


Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 13:11.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com