Newsgroup: it.comp.programmare
Titolo: [newbie] variabili in C

Qual'è la differenza tra una variabile Protect e una static ?
-- 
Cordiali saluti
Peppe La Rosa
http://www.programmareweb.com

 Qual'è la differenza tra una variabile Protect e una static ?
Una variabile static è una variabile che ha scope solo nel file dove viene
dichiarata. Negli altri moduli ti sarà possibile dichiarare variabili con lo
stesso nome di quella dichiarata static in precedenza.
Le variabili protect sinceramente mi mancano :(
Deep

 ha scritto nel messaggio
news:_a5xb.23258$9k3....@tornado.fastwebnet.it...

Da quello che ho capito le protect vengono allocate "staticamente" senza
liberare lo spazio fino all'uscita dal programma
e rendono + veloce il prg.
-- 
Ciao
Flex
[ MAIL ATTACH, SPAM, and msgs larger than 95K > /dev/null ]

 e rendono + veloce il prg.
Ho fatto una velocissima ricerca con Google ma non ho avuto riscontri e
anche sul K&R non trovo nulla.. E in fase di compilazione mi segnala errori.
Tu dove le hai trovate?
Cmq il comportamento di queste "protect" assomiglia molto al comportamento
delle variabili dichiarate register.


Credo di avere fatto moolt cofusione sono proprio le register quelle a cui
mi riferivo .......
La fonte è il libro  di Stevens : Unix : sviluppo del software di
networking.


 networking.
:))
Beh allora tornando alla tua domanda iniziale, solitamente vengono
dichiarate REGISTER variabili locali. REGISTER è di fatto un'ottimizzazione
poichè le variabili (che devono essere di tipo INT) vengono poste
direttamente nei registri.
Dichiarare una variabilale REGISTER non garantisce comunque che questo
avvenga, ossia non è detto che una variabile dichiarata tale sia posta nei
registri (perchè magari sono già pieni).
Di una variabile REGISTER non è possibile conoscerne l'indirizzo.
Deep

 stesso nome di quella dichiarata static in precedenza.
Non è una definizione corretta. Secondo me confondi le variabili "static"
con le variabili globali.
In realtà ogni variabile definita in un modulo ha visibilità (scope) solo
all'interno del modulo dove è dichiarata.
(Per intenderci, un modulo potrebbe essere definito come "una porzione di
codice racchiuso tra parentesi graffe (in C)")
La variabile dichiarata all'interno del modulo può essere "auto"(default),
"static" o "register", e questa differenza riguarda il tipo
di persistenza che desideriamo. In particolare la variabile "auto" assume un
valore casuale ogni volta che si rientra all'interno
del modulo, quindi è compito del codice assegnarle un valore definito.
Viceversa, una variabile "static"mantiene il valore precedentemente assunto,
anche dopo che si è usciti dal modulo.
In pratica una variabile "static" potrebbe essere definita come una
variabile globale ma con visibilità (scope) a livello del
modulo dove è definita.
La variabile "register" è una variabile che deve, se possibile, essere
allocata in un registro (e non nello stack o nello heap), per
garantire prestazioni di velocità del codice.
Ellebi

 Qual'è la differenza tra una variabile Protect e una static ?
in C non esiste il modificatore protect, esiste protected in C++.
il modificatore d'accesso di tipo PROTECTED, permette (semplificando a
bestia, l'accesso solo alla stessa classe e alle classi derivate.
Per quanto riguarda le static (in ANSI C):
"ad una variabile static viene assegnata una posizione di memoria
fintanto che il programma e' in funzione"
(Steve Schustack, "Varations in C", 1985)
il che significa:
#include <stdio.h>
int prova(int a)
{
	static int c;
	c += a;
	return c;
}
int main(int argc, char **arv)
{
	int i;
	for (i=0;i<5;i++)
		prova(i);
	printf ("%d\n",prova(5));
}
stamperà 15.
Ovviamente puoi utilizzare anche static in C++, una variabile di classe
dichiarata static in C++ significa semplicemente che si riferirà al
modello e non alla singola istanza della classe, è utile ad esempio per
contare quanti oggetti vengono creati.
ciao.

 modulo dove è definita.
[cut]
Spiegazione molto più corretta e completa della mia :)