|
|
|
![]() |
|
Strumenti |
![]() |
#41 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Questo, invece, dovrebbe dipendere dall'ordine di valutazione delle espressioni, che non è garantito in C.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#42 | |
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
Quote:
![]() P.S: se queste cose sono banali o tediose, ditelo ![]()
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
![]() |
![]() |
![]() |
#43 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Il risultato è corretto.
Se vuoi che stampi 1 nel primo caso devi modificare il codice da così: Codice:
#include <stdio.h> #include <stdlib.h> int main() { int a = 0; printf("a = %d \n", a); if(a+1) {} printf("a+1 in if %d \n", a); if(a++){} printf("a++ in if %d \n", a); return 0; } Codice:
#include <stdio.h> #include <stdlib.h> int main() { int a = 0; printf("a = %d \n", a); if( a = a+1 ) {} printf("a+1 in if %d \n", a); if(a++){} printf("a++ in if %d \n", a); } ![]() Ultima modifica di Vincenzo1968 : 22-01-2013 alle 16:08. |
![]() |
![]() |
![]() |
#44 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Dovrebbe essere scritto, se non ricordo male, che si vuole essere sicuri di voler preservare l'esatto ordine di valutazione, bisogna ricorrere a delle assegnazioni con variabili di appoggio; ovviamente fuori dalle espressioni (come istruzioni a se stanti). Comunque il K&R non lo leggo da un pezzo, per cui prendilo con le pinze. Quote:
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
![]() |
![]() |
![]() |
#45 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
![]() ![]() |
![]() |
![]() |
![]() |
#46 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Prova a confrontarla con questa:
Codice:
a=0; b = (++a,a+1,a+2);
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#47 |
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
Appena sono a casa provo.. Sono appena uscito dall'ufficio e mi trovo in treno..
![]() Inviato dal mio HUAWEI U8825-1 con Tapatalk 2
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
![]() |
![]() |
![]() |
#48 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Codice:
int main() { int a = 0; int b = 0; printf("a = %d \n", a); a=0; b = (++a,a+1,a+2); if( a ) {} printf("a+1 in if %d \n", a); printf("b = %d \n", b); if(a++){} printf("a++ in if %d \n", a); } Codice:
a = 0 a+1 in if 1 b = 3 a++ in if 2 Ultima modifica di Vincenzo1968 : 22-01-2013 alle 16:47. |
![]() |
![]() |
![]() |
#49 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Se volete che stampi b = 4 dovete fare così:
Codice:
b = ( ++a, a = a + 1, a = a + 2 ); |
![]() |
![]() |
![]() |
#50 |
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
Interessante.. Grazie x aver proseguito la traccia...
![]() Inviato dal mio HUAWEI U8825-1 con Tapatalk 2
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
![]() |
![]() |
![]() |
#51 | |
Senior Member
Iscritto dal: Dec 2012
Messaggi: 4434
|
Quote:
|
|
![]() |
![]() |
![]() |
#52 |
Senior Member
Iscritto dal: Dec 2012
Messaggi: 4434
|
|
![]() |
![]() |
![]() |
#53 | |
Senior Member
Iscritto dal: Dec 2012
Messaggi: 4434
|
Quote:
No cmq l operatore comma, come tutti gli operatori, ha l ordine di valutazione garantito. Sono alcune espressioni che non è definito come.vengono valutate. Ad esempio non sai quali parametri.vengono valutati prima in una definizione di funzione: Func(a,b,c) |
|
![]() |
![]() |
![]() |
#54 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12847
|
Strano, mi sarei aspettato di vedere solo la prima print.
a++ non dovrebbe essere valutato 0 in quel caso (ovvero il valore della variabile corrente)? Forse fa prima l'incremento e poi valuta l'if sul registro in questione? Comunque questo è un motivo per cui cerco sempre di esplicitare il più possibile la condizione, evitando cose di quel tipo che possono creare grossi problemi in chi legge ![]() |
![]() |
![]() |
![]() |
#55 | ||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Idem.
![]() Quote:
Nel momento in cui si referenzia un singolo byte, con una macchina little-endian questo coincide col byte basso dell'intero a 32 bit memorizzato nello stack, mentre per una big-endian corrisponderà a quello alto (da cui il nome, per entrambi). Quote:
Quote:
Except as indicated by the syntax /27/ or otherwise specified later Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||
![]() |
![]() |
![]() |
#56 | |
Senior Member
Iscritto dal: Dec 2012
Messaggi: 4434
|
Quote:
![]() tutto chiaro, per quanto riguarda altri gli altri operatori stavo confondendo l' ordine di valutazione con l'associativita che é definita ovviamente x tutti gli operatori ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:51.