Newsgroup: it.comp.lang.c
Titolo: Librerie standard

Per piacere aiutatemi a dissipare questi ultimi dubbi sul C:
1) se errno.h mi permette di capire che tipo di errore si e' verificato,
come faccio a non fare bloccare il programma dopo l'errore?
2) float.h e limits.h mi permettono di impostare limiti diversi per i tipi?
O posso solo leggere i limiti esistenti?
3) setjmp.h mi permette di ripartire da un dato punto del programma o da un
dato stato dei registri? Che utilizzo pratico ha?
4) come posso usare signal.h al contrario, cioe' come posso chiamare
programmi esterni con un dato signal?
5) che utilizzo pratico ha stddef.h, oltre a permettermi di puntare
direttamente le variabili all'interno di una struttura?
6) in stdlib.h, se ho capito bene, cstr() trasforma stringhe in array e
viceversa. Ma questi due tipi non sono la stessa cosa, per il computer?
7) Quando voglio "uscire" da un programma, posso farlo solo con le system
call e le librerie fornite da terze parti? Le system call sono contenunte in
una libreria? Posso accedere direttamente a registri, scheda video, e tutto
il resto?
Chiedo scusa per la mole di domande :-P
Buon proseguimento
enos

 il resto?
Per uscire da un programma puoi ritornare se ti trovi in main(), oppure 
da qualsiasi altra funzione basta chiamare la funzione exit(), che e` 
standard e che trovi in <stdlib.h>.
-- 
Enrico `Trippo' Porreca

 standard e che trovi in <stdlib.h>.
Mi ero spiegato male, per "uscire" intendevo comunicare con programmi
esterni - conosco exit() e abort(). Ma da quello che mi hai detto, ho capito
che non c'e' un modo standard di farlo, che dipende dal s/o.
Adesso il linguaggio mi e' molto piu' chiaro, grazie molte Enrico :-)
Cari saluti
enos

 Se il programma termina, mi chiedevo a cosa mi serve conoscere l'errore.
Non sempre un programma termina a causa di un errore. Se dereferenzi un
puntatore NULL e' molto probabile... :-)
Conoscere il perche' un programma ha dato errore e' _sempre_ utile.
Al programmatore serve per cercare di evitare la situazione che ha
generato l'errore: sapere che c'e' stato un accesso scorretto ad un
file (errore che generalmente non crasha il programma se beccato in
tempo), serve per cercare dove questo e' avvenuto e aggiungere un
controllo per evitarlo.
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Se il programma termina, mi chiedevo a cosa mi serve conoscere l'errore.
Si tratta di tre casi molto diversi.
In seguito al tentativo fallito di aprire un file, il programma non 
termina, ma fopen() restituisce semplicemente NULL. A questo punto tu 
controllando il valore di ritorno puoi notare che il tentativo e` 
fallito, e adeguarti (il come dipende dalla situazione, si va dal 
terminare grezzamente al richiedere un nome di file valido all'utente).
Tramite il controllo della variabile globale errno puoi eventualmente 
conoscere il perche` l'apertura sia fallita: file inesistente, permessi 
insufficienti, memoria finita o che altro. Problema: il contenuto di 
errno e` dipendente dal sistema. L'unica cosa portabile che puoi fare e` 
stampare la stringa corrispondente all'errore tramite le funzioni 
strerror() o perror(), e sperare che l'utente sia in grado di risolvere 
la situazione.
Per quanto riguarda la divisione per zero: `prevenire e` meglio che 
curare' (soprattutto quando, come in questo caso, la cura non esiste 
:-)). Basta verificare che il divisore sia diverso da 0 *prima* di fare 
effettivamente la divisione, e come sopra adeguarsi (in maniera sempre 
dipendente dal programma).
Infine, nel caso del `segmentation fault' (che in termini di standard C 
credo si chiami `segment violation' o qualcosa del genere - non ho al 
momento sotto mano il documento ufficiale), il problema non e` a run 
time ma nel codice: il fatto che tu stia accedendo a memoria che non ti 
appartiene e` dovuto
     a) ad un bug (possibilita` quasi certa)
     b) ad una scelta volontaria (il che in generale e` molto stupido)
in quanto la cosa non avverra` *mai* in un programma corretto. La 
soluzione e`: debuggare il codice.
-- 
Enrico `Trippo' Porreca

 [...] Si tratta di tre casi molto diversi. [...]
Grazie di cuore, hai messo la ciliegina sulla mia torta :-)
enos
--
prossimamente: simulazione rete neurale con linguaggio C