PDA

Visualizza la versione completa : Esercizio assegnazioni (Linguaggio C)


Cyber-X91!
18-02-2013, 11:00
Non so se ho risposto bene a questo esercizio mi date una mano?

Siano b e i dichiarate come segue:

enum {FALSE, TRUE} b;

int i;

Considerare le seguenti istruzioni:

a) b=TRUE;
b) b=i;
c) b++;
d) i=b;
e) i=3*b+1;

Quali istruzioni sono legali? Quali sono sicure (ossia hanno sempre un risultato che ha senso)?

Io ho risposto che sono tutte legali ma quella sicura solo la "a" in quanto le altre assegnano valori che non conosciamo... Se mi sbaglio vi prego di correggermi... Grazie

Hard*RTOS
18-02-2013, 11:40
Probabilmente per "legali" si intendono quelle espressioni consentite dalla semantica del linguaggio, oltre che dai vari compilatori.
Il problema non risiede tanto nei "dati non conosciuti", quanto nel tipo di dati utilizzati: evidente che non logicamente corretto uguagliare e/o confrontare tipi di dato diversi, nella fattispecie boolean e integer.

Cyber-X91!
18-02-2013, 11:47
Con enum b assume comunque valore 0 o 1 stampandolo a video... Quindi qual' la risposta corretta? Cio ho sbagliato o meno? La domanda quelle che hanno senso penso in questo caso e quindi penso che abbia senso solo la a... O sbaglio? Le altre ho verificato e a livello sintattico sono tutte corrette quindi penso siano tutte legali... Grazie comunque della risposta

Hard*RTOS
18-02-2013, 11:53
Si, nel C considera ogni elemento dell'enum come int, per cui lecito confrontare e/o assegnare tale valore a variabili di tipo intero.

Cyber-X91!
18-02-2013, 11:56
Ok quindi per quelle che hanno senso corretto secondo te dire che solo la a?

oregon
18-02-2013, 11:58
Ma tu cosa hai risposto?

Cyber-X91!
18-02-2013, 12:10
Se leggi il mio primo post ce scritto alla fine

oregon
18-02-2013, 12:57
Sono tutte legali ma sicure a, d

MItaly
18-02-2013, 15:48
"sicura" solo la a, dato che in tutte le altre si ha come "sorgente" dell'assegnamento una variabile non inizializzata. L'unica eccezione si ha nel caso in cui b e i siano variabili globali, nel qual caso sono inizializzate automaticamente a 0 (quindi FALSE per b e 0 per i); in quest'ultimo caso, sono tutte istruzioni ben definite.

Cyber-X91!
18-02-2013, 15:57
Grazie, ho seguito il tuo stesso ragionamento anche se non avrei saputo spiegarlo come lo hai spiegato tu... Grazie :)

Loading