Newsgroup: it.comp.lang.c
Titolo: Domanidina

cosa si sottointente con if(var) e con if (!var)?
ciao

 ciao
if (var )         =====>       if(var != 0)
if( !var )        =====>       if(var == 0)

no no!!
ha ragione iGor!
if ( var ) significa "Se var è diverso da 0"
if ( !var ) significa "Se var non è diverso da 0" --> "Se var è uguale a 0"
Dome

 >
Scusate tanto...si!!

 ha scritto nel messaggio
news:9gfhut$2gg$1...@fe1.cs.interbusiness.it...

No invece!!  ma perchè mi hai quotato la risposta cambiata che mi hai fatto
credere di aver scitto una covolata?   buona la prima

Ehmmmmmmmmmmm:
quindi la versione giusta quale cavolo č?
if ( var ) ---> if ( var != 0 )
if( !var ) ----> if( var == 0 )
o il contrario?
Dome

> if( !var )        =====>       if(var != 0)
No.
Bye,
 Emmanuele.
-- 
Emmanuele Bassi         |             [ 
http://digilander.iol.it/ebassi/
 ]
emmanue...@iol.it
  |
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

if (!var) sta per var==0 ...
if (var)  sta per var!=0 ...
Ciiips
Enrico S.
--
Webmaster della Pagina NON Ufficiale del SonyCRX100
SonyCRX120,  SonyCRX140E/S, SonyCRX100EX, HP8100
HP8200, HP9100 & HP9200
http://www.freeweb.org/computer/SonyCRX100/

Bhe a questo punto basterà fare un piccolo programmino di prova ;-)
Così ci mettiamo tutti d'accordo, grazie per avermi risposto.
Corvo

si, è una cavolatina:
malloc se non riesce a nella sua opera ritorna 0, giusto?
e tutti sappiamo che i controlli su malloc sono di questo tipo:
char *str;
str = malloc(128);
if(!str)
{
  printf("Mannaggiiiiiiiaaaaaaaa muooooooooooooort!\n");
  return -1;
}
Notare che ho tolto cast e sizeof(char) per far contenti tutti!
Dome


E' tutta colpa di quel Skonvols2k....ha sconvolto veramente!
Mi sa che lo ha fatto a posta : )

 le poche idee chiare che mi sono fatto :)
Mi dite per favore la versione giusta?
-- 
Posted from 
dns.onenet.it
 [147.123.225.45] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 
Ciao.
La parola chiave if valuta l'espressione tra parentesi ed esegue il
codice che segue (sia esso singola istruzione o blocco) nel caso il
risultato sia vero, cioe' diverso da zero.
Questo e' valido anche in tutte le altre istruzioni di controllo del
flusso, nei cicli etc...
Percio' per fugare ogni dubbio che e' nato in questo thread la prima
risposta del mio omonimo e' quella giusta.
Igor Rossetti

malloc se non riesce a nella sua opera ritorna 0, giusto?
Pelo nell'uovo :-))
void malloc(size_t size);
ritorna un puntatore nullo, se la memoria non viene allocata.
Igor Rossetti

 ha scritto nel messaggio
news:x9IW6.5374$Cq5.2...@news.infostrada.it...

Allora quello che dici tu ed iGor e' vero ma credo che sia piu' esplicito:
if(var)   -equivale-a->   if(var==TRUE)     con TRUE  un qualsiasi valore
diverso da 0.
if(!var)  -equivale-a->   if(!var==TRUE)   che si verifica quando var==FALSE
(dove false equivale a 0).
Alex

(dove false equivale a 0).
"!var" vale sempre 0 oppure 1 quindi quanto dici non funziona "con
TRUE un qualsiasi valore diverso da zero". Ad esempio se TRUE==2
e var==0 allora "if (!var == TRUE)" non e' verificato.
Dire invece "if (!var)" equivale effettivamente a dire "if (var==0)".
Riassumendo:
  "if(var)" e' la stessa cosa di "if(var!=0)"
e
  "if(!var)" e' la stessa cosa di "if(var==0)"
Io personalmente non ho mai trovato utile il definire cose
come TRUE e FALSE in programmi C.
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 come TRUE e FALSE in programmi C.
Beh, ok, ognuno ha il suo metodo, ma una espressione viene sempra valutata
come vera o falsa.
Alex

Credo cmq che fosse chiaro.
Si, ma e' fuorviante come spiegazione, perche' in C si assume con
TRUE quasi sempre una costante (o meglio una #define) definita
precedentemente.
Quindi meglio usare l'esempio di Andrea :
if ( var )  
equivale a  
if ( var != 0 ) 
--
Andrea Laforgia - walkietalkie(at)
libero.it
#exclude <windows.h>

ritorna un puntatore nullo [...]
che e' rappresentabile con 0.


Mi dite per favore la versione giusta?
Ma porca miseria, siamo davvero a questi livelli ?
if ( var )  <-----> if ( var != 0 )
if ( !var ) <-----> if ( var == 0 ) 


Credo cmq che fosse chiaro.
Non ho seguito questo thread dall'inizio... ma quella frase mi
sembra abbastanza fuorviante. Se dico
   if (x!=0)
non sto dicendo
   if (x==TRUE) "con TRUE qualsiasi numero diverso da zero"
a meno che io intenda con "qualsiasi" che il valore di TRUE
possa cambiare per ogni singolo valore di x a seconda delle
necessita'. Questo e' un modo assolutamente anomalo e non
comune di utilizzare identificatori in una espressione
simbolica (dovresti scrivere TRUE(x)).
Quando dici TRUE io sono portato a pensare ad una specifica
costante (come fra l'altro molti fanno nei sorgenti C usando
proprio quel nome) e con quella accezione dire (x==TRUE)
equivale a (x==1) che non e' assolutamente la stessa cosa
di dire (x!=0).
(x!=0) e' verificato per tutti i possibili valori di x tranne
che per il valore zero: (x==TRUE) e' verificato per un solo
ben specifico valore di x. Sono due cose ben diverse.
Inoltre non e' nemmeno vero che io posso in un programma C
posso scegliere di dare alla mia costante TRUE (se stavo
pensando di definire una costante) un valore che piace a me:
il problema e' che se TRUE non vale 1 (il ben specifico
valore 1 e non altri) allora questo statement non funziona
come mi potrei aspettare
   if ((x==5) == TRUE)
visto che in C l'espressione (x==5) vale solo 0 oppure 1.
Poi ciascuno e' libero di usare i formalismi che gli pare...
al massimo nessuno capisce cosa intende dire, lo ritengono
pazzo e lo rinchiudono in una torre.
Contento lui contenti tutti.


pazzo e lo rinchiudono in una torre.
ROTFL :)



Il rapporto "tipo di domanda" / "lunghezza thread" é davvero
imbarazzante!!!...Inoltre perché quando avete dubbi di tal guisa non mettete
mano al compilatore e provate da voi? Le risposte sono nel vostro codice!!!

 che e' rappresentabile con 0.
ma come??!!
con tutte le paranoie che mi hai fatto sulle macchine in cui i pointer non
hanno tutti i bit a 0, ora invece sostieni che 'e' rappresentabile con 0'?
io mi sarei aspettato che dicessi che NULL non e' detto che sia zero e
quindi
ptr = malloc( ... );
if( !ptr ) { ... }
e' una scrittura potenzialmente scorretta, ma va testato come
if( ptr==NULL ) { ... }
per portabilita' ovunque!
Non ho ancora capito nulla vero?  :-)
ciao
donCiccio

 vostro codice!!!
Ma purtroppo sono sbagliate.
Quelo

 Non ho ancora capito nulla vero?  :-)
Infatti. :-) La costante 0 (zero), se utilizzata in un contesto di
puntatore, non rappresenta il valore numerico zero ma il puntatore
valido che non punta a niente.
EMG

 precedentemente.
Si,questo e' vero, per questo avevo specificato che non era una costante ma
era da intendersi come qualsiasi valore diverso da 0.
Forse e' piu' incasinato, e' vero.
Alex

void* malloc( size_t size ) ;
E il bello e' che ho scritto pelo nell'uovo :-))))))))))
Igor Rossetti

Non ho ancora capito nulla vero?  :-)
Gia' :)
0 puntatore non vuol dire 0 intero.


 mano al compilatore e provate da voi? Le risposte sono nel vostro
codice!!!
Alla faccia della domandina! =)
Si, avete ragione non lo faccio più. :P
Per ragioni che non sto qui a spiegare non potevo provare da me!
Grazie a tutti.
Corvo

 E il bello e' che ho scritto pelo nell'uovo :-))))))))))
void e void* non sono, propriamente, un "pelo nell'uovo".


 Emmanuele.
Credo di conoscerla la differenza, sbagliare e' umano.
Questa mia risposta era autoironica: visto che nell'intenzione di fare
il pignolo ho cannato ho voluto appunto rimarcare su quello.

 il pignolo ho cannato ho voluto appunto rimarcare su quello.
Mi spiace, evidentemente avevo dimenticato di includermi l'header
"ironia.h"... :-)


> ROTFL :)
E che significa?

E che significa?
Rolling On The Floor Laughing
