Newsgroup: it.comp.lang.c++
Titolo: Continuazione del messaggio virgole

Comincia la lezione del professore, il quale ci fa scrivere il seguente
codice:
int main() {
          int a, b, c, d;
          float e;
Fino a qui tutto normale poi aggiunge:
"la sintassi contratta che può essere utilizzata per la dichiarazione di
più varibili o comunque di più cose dello stesso tipo vi semplifica anche
in un altro modo l'assegnamento alle varibili:
"
e ci fa aggiungere:
 
            a = 10, b = 20, c = 30, d = 30, e = 500.0; // notare l'ultimo
identificatore.
Il problema è che il mio compilatore (Dev-C++) ed anche il Visual C++
compilano senza segnalare errore ma l'assegnamento, rifacendomi all'esempio
sopra, non dovrebbe essere scritto:
                a = 10;
                b = 20;
                c = 30;
                d = 20:
                e = 400.0;
?
Grazie                

                 e = 400.0;
Capisco la tua perplessità.
Quella sequenza di assegnamenti separati da ',' è in effetti
sintatticamente benformata, ma solo un pazzo può usarla nel proprio
codice. Attenzione: non confondere quel uso della virgola, con quella
usata per separare dichiarazioni e inizializzazioni di variabili (Qui si
tratta, come dici giustamente tu, di assegnamenti.)
La virgola (',') può essere in C/C++ un operatore binario, il quale,
avendo un binding meno forte dell'assegnamento, nell'esempio in questione
di fatto produce lo stesso effetto visibile che avremmo usando ';'.
La valutazione di un espressione di tipo (a,b) si riduce semplicemente al
valore di b. Prova, ad esempio:
   int a
   int b;
   a = ( 1, 2, 3, 4, b = 5 )
Ora, a vale 5.
L'unica applicazione sensata, che io conosca, dell'operatore virgola è
nell'ambito di uno statement for:
 int b = 0;
 for( int a = 0; a < 100; a++,b++ ) {  }
Per il resto, quell'uso della virgola genera soltanto confusione.
Ad esempio, non è infrequente che un neofita cerchi di usare qualcosa come
 int a[12,4]; 
per dichiare un array bidimensionare. Il fatto che il compilatore lo
digerisca senza battere ciglio non lo aiuterà di certo a capire gli
"strani" fenomeni che riscontrerà quando cercherà di utilizzarlo. ;-)
Max

 ?
Nella prima riga viene utilizzato (senza scopo) l'operatore virgola e
quindi č corretta.
EMG

identificatore.
Di semplificare non semplifica nulla, al piu` ti fa risparmiare qualche 
';'
Comunque e` corretta, semplicemente usa l'operatore virgola
(e` non e` una sintassi contratta nel senso della dichiarazione) il
cui effetto e` quello di produrre come risultato dell'espressione
500.0 (l'assegnamento produce come risultato il valore
denotato dall'rvalue, l'operatore virgola valuta tutti gli operandi da
sx a dx, scartando tutti i valori meno l'ultimo che e` quello che 
restituisce).
Paolo

qualcosa come int a[12,4]; 
Scusa l'ignoranza ma il compilatore in questo caso cosa crea ?
int a[12] o int a[4] ?
ciao

int a[12] o int a[4] ?
int a[4] ;
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
-----------------------------------------------------
"There is nothing better for understanding a kangaroo
 than seeing it jump." [D.Grune, C.J.H. Jacobs]

Come mai, invece:
void xxx()
{
	if (a==b) c=b,return;
	....
}
da errore in compilazione sul 'return'? (Vc++)
Luc.


 da errore in compilazione sul 'return'? (Vc++)
Perche' cosi' deve.  In 5.1.8.1 lo Standard dice che la struttura e':
  expression:
    assignment-expression
    expression, assignment-expression
e "return" non e' una assignment-expression.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

da errore in compilazione sul 'return'? (Vc++)
Perche' non puoi assegnare una keyword (return) ad una variabile ! :)



Scusate l'intromissione, sono un programmatore alle prime armi, ma
dov'è possibile reperire lo "Standard" sopracitato?
Grazie!

a_p...@lycosmail.com
 writes:

Ci sono diversi modi.  Per una copia elettronica (un file .pdf di 2.5
MBytes, che costa 18 US$ ed e' leggibile con Acrobat Reader) vai
all'URL 
http://webstore.ansi.org/product.asp?sku=ISO%2FIEC+14882%2D1998
 ;
sotto 
http://www.ansi.org/
 puoi trovare anche una copia cartacea (il
prezzo sale a US$ 175 :-)


 Ci sono diversi modi.
Questa è decisamente una FAQ. Paoloooo....
EMG

Questa è decisamente una FAQ. Paoloooo....
Gia` provveduto... :-)
Mi date il link a cui reperire gratuitamente il draft?
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------

 Mi date il link a cui reperire gratuitamente il draft?
Io non lo includerei, perche' sebbene sia comodo, ne sarebbe
teoricamente vietato l'uso. Chi non puo' o non vuole spendere i soldi
puo' sempre chiedere qui: se la domanda e' posta bene Alex non
resiste...
Ciao,
Nicola

 writes:

Il _draft_ e' liberamente distribuibile.  E' lo standard definitivo che
e' copyrighted...


 e' copyrighted...
Anche il draft e` soggetto a copyright, con licenza d'uso gratuito
*al solo e specifico scopo* di segnalare errori nel draft stesso
prima che diventi standard ufficiale.
Vista l'inesistenza di macchine del tempo, l'unico scopo lecito
per usare il draft non si puo` piu` applicare e quindi l'uso del
draft e` in violazione di copyright.  Improbabile che l'ISO faccia
causa per una roba del genere, ma personalmente le leggi sulla
proprieta` intellettuale *LE RISPETTO COMUNQUE* (anche se penso
o spero che il copyright-holder ometta di farmi cause se le violo)
e non mi pare il caso di incoraggiarne la violazione.
Alex

 proprieta` intellettuale *LE RISPETTO COMUNQUE*
Anche io.  Penso in particolare che chiunque svolga un'attivita' di
crezione intellettuale (quale e' lo scrivere software applicativo)
debba essere particolarmente sensibile al riguardo :-)


 ISO, ma dal sito web di Jutta Degener sul C,
Il commento di Jutta, "non normativo", e` solo riassuntivo di quello
con cui il working-draft fu rilasciato.  Se dubiti dell'interpretazione,
come da README:
"""
If you have any questions about whether an intended use is or is not
appropriate, please contact the undersigned.
       Andrew Koenig
       Project Editor, WG21
 
a...@research.att.com
"""
Alex