Newsgroup: it.comp.programmare.win32
Titolo: Domanda sulla dichiarazione multipla di variabili omogenee

Ciao a tutti, volevo chiedervi come si deve scrivere questa riga:
-----
register unsigned long int targ=0, tem, sm=
2147483648
;
-----
affinchè tutte le variabili siano dello stesso tipo, quindi di tipo 
"register", "unsigned long int"?
Volevo chiedervi inoltre come mai se scrivo questa riga:
----
register unsigned long int sm=
2147483648
;
----
Il compilatore (gcc del Dec-cpp versione 4.9.8.0) mi dice " [Warning] 
decimal constant is so large that it is unsigned " (che intendo come un 
messaggio che mi avverte del fatto che ho superato il valore massimo 
attribuibile alla mia variabile unsigned long int). Il numero che ho 
assegnato equivale ad un numero che convertito in base 2 ha il bit di 
peso maggiore (2^31) pari a 1 e tutti gli altri a 0. Dove sta l'errore 
che mi provoca il "warning"?
	ciao e grazie per la risposta, rz
-- 
                                   /TIDIRYUM - Ferrara - ITALY\
                                   \ICQ#    13901251   !!bye!!/
° °  associato #2 alla LAVPS2 ° °
Matrix - Messiah - Lisa INSTALLER

 peso maggiore (2^31) pari a 1 e tutti gli altri a 0.
Appunto, in complemento a due quello e` un numero negativo. Per la
precisione, e` il numero piu` negativo possibile, cioe` -2^31.
-- 
Lorenzo

 che mi provoca il "warning"?
Un warning non e' un "vero errore", e' semmai un avviso di fare
attenzione a quel che si sta facendo.
Per questo motivo il modo in cui vengono generati i warning
e' praticamente a discrezione di chi scrive il compilatore.
Nel tuo caso ti sta avvertendo che che la *costante* specificata
puo essere *solo* di tipo unsigned ed il warning viene emesso
*prima* di vedere dove va a finire il valore (in questo caso
va tutto bene, visto che *POI* risulta assegnata
ad un unsigned long int, ma questo viene controllato dopo che
e' stato prodotto il warning).
L. Micheletto

Ciao, mrzac!
Il giorno 24/12/2003 alle ore 18:33 hai scritto:
 m> affinchè tutte le variabili siano dello stesso tipo, quindi di tipo
 m> "register", "unsigned long int"?
Guarda che i registri nell'x86 non sono tanti, puoi dichiarare register al
massimo un paio di variabili poi inevitabilmente tornano ad essere variabili
normali. Poi con le performance dei processori moderni, dichiarare una
variabile register non serve praticamente a nulla.
 m> Volevo chiedervi inoltre come mai se scrivo questa riga:
 m>
 m> register unsigned long int sm=
2147483648
;
 m>
 m> Il compilatore (gcc del Dec-cpp versione 4.9.8.0) mi dice " [Warning]
 m> decimal constant is so large that it is unsigned " (che intendo come un
Metti una U subito dopo il numero:
register unsigned long int sm=2147483648U;
Bye

 -----
Sia da questo post, sia dal tuo post precedente, si nota che tu spesso
tendi a fare delle ottimizzazioni inutili; perché mai dichiarare una
variabile con la direttiva "register"? Perché così il programma è più
veloce? Guarda che la differenza non la nota nessuno, neanche quando si
tratta di milioni di operazioni... anche perché se dichiari 7 variabili in
quel modo, essendo i registri genearli solo 4 (A, B, C, e D) il
compilatore è costretto a fare delle ottimizzazioni, percui prima di
usarle le variabili andrà comunque a leggerle dalla memoria.
Inoltre, vedere post precedente, perché mai fare i tirchi circa
l'allocazione di 40 bytes, quando al giorno d'oggi si parla in termini di
megabytes e gigabytes?
Scusa se la risposta era OT,
saluti e buone feste
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


tra l'altro la direttiva register è solo un consiglio al compilatore e non
un obbligo (un po' come l'inline)
--
Pela

 
Ho scritto "unsigned".
		ciao, rz.

 Ho scritto "unsigned".
unsigned e` la variabile alla quale viene assegnato il valore costante, e
non la costante stessa! Di default in C le costanti sono considerate int.
E` giusto quello che ti hanno detto anche altri, metti una U di seguito alla
costante ed essa sara` trattata come unsigned int.
-- 
Lorenzo

 
		ciao, contraccambio, rz.

 
		ciao, rz.