Come può essere (sscanf (buf, "% i", & mode)! = 1 || TRUE) essere riscritto su if (TRUE)?

0

Mi sono perso nell'apertura di questo post su reddit.

In che modo if (sscanf(buf, "%i", &mode) != 1 || TRUE) può essere riscritta in if (TRUE) ? Questo presuppone che il sscanf non fallisca mai?

    
posta floopdagoop 20.08.2014 - 18:52
fonte

4 risposte

4

L'autore del codice chiama sscanf e quindi ignora il suo valore di ritorno assumendo che sia vero. Puoi sostituire il codice con 'if (TRUE)' a condizione che tu chiami prima sscanf.

    
risposta data 21.08.2014 - 07:29
fonte
3

Usando le tabelle di verità, puoi mostrare che restituirà sempre -EINVAL, quindi non hai nemmeno bisogno di

if (TRUE)
   return -EINVAL;

potrebbe essere solo

return -EINVAL

FWIW, dal momento che non ho il contesto, questo è quasi certamente un bug.

(mode != 2 || mode != 1)  

probabilmente avrebbe dovuto essere

(mode != 2 && mode != 1)
    
risposta data 20.08.2014 - 19:06
fonte
2

Penso che stia partendo dal presupposto che anche se sscanf non fallisce, non cura .

Poiché il risultato viene ignorato, non vedo affatto il punto di avere questo nel "se". Vorrei indovinare che la chiamata sscanf fosse originariamente a parte, quindi i dati di duff iniziarono ad arrivare (in buf ) e fare casino alla chiamata sscanf, quindi "|| TRUE" è stato aggiunto per sopprimere l'errore. Correzione classica, rapida e sporca.
Personalmente, preferirei vederlo rielaborato:

sscanf( buf, "%i", &mode ); /* buf may or may not contain a valid mode */ 

Ovviamente, l'elemento di dati indirizzato dalla modalità & potrebbe essere lasciato in uno stato incoerente - probabilmente un valore analizzato da buf , probabilmente no - ma questo codice non importa in alcun modo.

    
risposta data 21.08.2014 - 13:34
fonte
1

Sicuramente questo è un odore? L'uso di "OR true" in un'istruzione condizionale è un errore di lettura e non ha alcun valore funzionale.

if (statement OR true) {...} sarebbe meglio scritto come statement; {...}?

    
risposta data 21.08.2014 - 19:09
fonte

Leggi altre domande sui tag