Groups | Search | Server Info | Keyboard shortcuts | Login | Register


Groups > it.comp.os.linux.development > #61

Re: Usare o no lo stderr?

From guido84 <guido84@invalid.invalid>
Newsgroups it.comp.os.linux.development
Subject Re: Usare o no lo stderr?
Date 2017-06-11 09:16 +0000
Organization Aioe.org NNTP Server
Message-ID <ohj1oo$1an6$1@gioia.aioe.org> (permalink)
References <ohgc9s$1g7e$1@gioia.aioe.org> <ohi706$475$1@virtdiesel.mng.cu.mi.it>

Show all headers | View raw


Il 11/6/2017 03:39:14 enoquick scrisse:
>Il 10/06/2017 03:57, guido84 ha scritto:
>> Usando la  funzione strdup() con questo codice:
>> 
>> ----------------------------------------
>> // char *strdup(char *vettore_origine)  -- Fuori standard ANSI
>> #include <stdio.h>
>> #include <string.h>
>> 
>> int main(int argc, char **argv)
>> {
>> char *dest;
>> ..............
>> 
>> A questo punto, per evitare un'immissione che provocherebbe
>> un sigfault, ho trovato due modi, potreste dirmi qual e' il
>> migliore? (funzionano entrambi benissimo)
>> 
>> --------------- PRIMO MODO -----------------
>> if (argc == 1)      // Se argv[1]=0 va in sigfault
>> {
>> printf("Usage: Duplica il vettore-stringa $1 in stdout \n");
>> }
>> 
>> else
>> {
>> dest = strdup(argv[1]);
>> printf("%s\n", dest);
>> }
>> return 0;
>> }
>> -----------
>> 
>> ================ SECONDO MODO ================
>> #include <stdlib.h>
>> 
>> if (argc == 1)           // carica l'errore in stderror?
>> {
>> fprintf(stderr, "Usage: Duplica il vettore-stringa $1 in stdout \n");
>> exit(1);                 // evita il sigfault?
>> }
>> 
>> dest = strdup(argv[1]);
>> printf("%s\n", dest);
>> return 0;
>> }
>> ==========


>ma l'argomento era su stderr o sulla if ?

Era solo sull'if, ma meglio cosi' :-)

>Ti rispondo a tutti e due
>stderr si usa per i messaggi di errore quindi la prima printf la
>metterei come fprintf(stderr,...)
>La seconda e' corretta in quando non e' un messaggio di errore.

Pensavo scioccamente che questa fprintf():
---------
if (argc == 1)
{
fprintf(stderr, "Usage: Duplica il vettore-stringa $1 in stdout \n");
exit(1);
}
-------------

facesse parte della sintassi corretta per l'exit(1), adesso ho
capito (potrei anche non metterlela e farlo uscire senza fare
nulla).
Pero' secondo me allora l'Usage dovrebbe andare in stdout,
perche' ho provato diversi comandi e su stderr non ci buttano
nulla:
cp --help 2> /tmp/prova
e /tmp/prova resta vuoto.

>Per la if visto che il programma e' piccolo in questo caso usare l'uno o
>l'altro comporta poco
>Per routine piu complesse preferisco di molto il secondo modo,lo ritengo
>piu leggibile.
>Ho visto troppe if/else, e pure  annidate, in codice scritto da altri
>per preferire il secondo metodo che poi e' quello che uso.
>Questo alla faccia dei detrattori (non me ne vogliano,sono gusti) che
>affermano che una routine dovrebbe avere una sola uscita.

Ho capito, insomma e' semplicissimo, e' come con la bash fare:
-----------------------
if [ -z "$1" ]; then
echo "Usage: ..."
exit 0
fi
.....
--------------

Invece di:
-----------------------
if [ -z "$1" ]; then
echo "Usage: ..."
else
.....
fi
--------------

OK, usero' il primo senza else, cosi' non c'e' neanche il
pericolo di dimenticare il fi (cioe' la graffa chiusa).

Grazie e ciao!

P.S. Scusa ma sui detrattori che dici, la routine ha ugualmente
sempre una sola uscita in entrambi i casi: o esce l'Usage o
escono i risultati. Forse vogliono dire una sola riga d'uscita
dallo scritto del sorgente?
Cioe' se ci metti l'else o se ci metti l'exit il programma con
argv[1] vuoto esce sempre li', mica con l'else va avanti.

-- 
Saluti,
Guido

Back to it.comp.os.linux.development | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Usare o no lo stderr? guido84 <guido84@invalid.invalid> - 2017-06-10 08:57 +0000
  Re: Usare o no lo stderr? Giovanni <lsodgf0@home.net.it> - 2017-06-10 12:18 +0200
    Re: Usare o no lo stderr? guido84 <guido84@invalid.invalid> - 2017-06-10 10:33 +0000
      Re: Usare o no lo stderr? Alessandro Pellizzari <shuriken@amiran.it> - 2017-06-10 15:52 +0100
        Re: Usare o no lo stderr? guido84 <guido84@invalid.invalid> - 2017-06-10 16:56 +0000
  Re: Usare o no lo stderr? Giuseppe Della Bianca <bepi.zac@zac.adria.it> - 2017-06-10 13:54 +0200
    Re: Usare o no lo stderr? guido84 <guido84@invalid.invalid> - 2017-06-10 13:45 +0000
      Re: Usare o no lo stderr? Alessandro Pellizzari <shuriken@amiran.it> - 2017-06-10 15:59 +0100
        Re: Usare o no lo stderr? guido84 <guido84@invalid.invalid> - 2017-06-10 16:56 +0000
  Re: Usare o no lo stderr? enoquick <enoquick@gmail.com> - 2017-06-10 20:39 -0500
    Re: Usare o no lo stderr? guido84 <guido84@invalid.invalid> - 2017-06-11 09:16 +0000
      Re: Usare o no lo stderr? enoquick <enoquick@gmail.com> - 2017-06-11 07:43 -0500
        Re: Usare o no lo stderr? guido84 <guido84@invalid.invalid> - 2017-06-11 18:56 +0000
          Re: Usare o no lo stderr? Alessandro Pellizzari <shuriken@amiran.it> - 2017-06-12 21:45 +0100

csiph-web