Newsgroup: it.comp.lang.c
Titolo: Alcuni dubbi banali...

Ciao a tutti,
sono un po' alle prime armi con la programmazione e avevo bisogno di due
chiarimenti, probabilmente per molti di voi cose banali...
1) nella dichiarazione del main, nel caso debba passare argomenti, che
differenza c'è tra scrivere (int argc, char *argv[]) e (int argc, char
**argv)? Non credo ci sia nessuna differenza, visto che ottengo le stesse
cose, ma allora cosa vuol dire **argv?
Il main, che una funzione quasi come le altre, può non aver bisogno della
dichiarazione di tipo all'inizio, cioè io posso scrivere sia int main(...)
che main(), o invece cambia qualcosa se scrivo in un modo o nell'altro?
2)in un programma banale quale:
main() {
   printf("ciao ciao\n");
   exit(0);
}
che differenza c'era se invece di exit(0), inserivo un return(0)? Sono
simili? Li posso usare indistintamente?
Grazie e scusate se le domande sono un po' cretine,
ma chi prima o chi dopo si è stati tutti principianti!!!
Ciao CAMI.

 simili? Li posso usare indistintamente?
Qui, se ricordo bene, fanno la stessa identica cosa. Ricorda cmq che 
dovresti scrivere:
int main(void) {
   printf("ciao ciao\n");
   exit(0);
   return 0;
}
ovvero: dicitura standard per il main, ed un return ("obbligatorio", 
perche', a questo punto, hai dichiarato che ritorni un int, e tutti i 
percorsi un int devono ritornare ;P)
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://www.cs.unibo.it/~mbellett
Linux registered user 299762 @ Linux registered machine 213003

 percorsi un int devono ritornare ;P)
Scusatemi se mi intrometto, ma la "exit()" non provoca l'uscita dalla
funzione, nello specifico il main? Se e' cosi' il programma termina prima
di raggiungere la "return". O no?
Ciao.
-- 
~~~~Slaine Mc Roth~~~~
**Linux User# 312607**
Gli assenti non sono mai senza difetti. Ne' i presenti senza una scusa.
                (Benjamin Franklin)

 percorsi un int devono ritornare ;P)
exit() e` una funzione particolare, il compilatore *sa* che quella
funzione non ritornera` mai (e` specificato chiaramente dallo standard)
e ne tiene conto nell'analisi del flow del programma. Ie. non vedrai mai
un warning dovuto alla mancanza di un return dopo la exit().
Inoltre lo standard indica che all'interno di main la chiamata a return
equivale alla chiamata ad exit con lo stesso valore, quindi il codice
che hai scritto e` ridondante (non sbagliato, ma almeno - IMHO -
brutto).
Luca
-- 
Home: 
http://kronoz.cjb.net
Recursion n.:
	See Recursion.

 di raggiungere la "return". O no?
Si`.
-- 
Enrico `Trippo' Porreca

 equivale alla chiamata ad exit con lo stesso valore
A meno di chiamate ricorsive a main.
E a meno che alcune variabili locali di main servano durante la fase di 
chiusura del programma, ad esempio se viene passato un buffer allocato 
automaticamente (invece che staticamente o tramite *alloc) alla funzione 
setvbuf e il file non viene chiuso esplicitamente. Vedere in proposito 
le FAQ di comp.lang.c e il paragrafo 7.19.5.6 della bozza dello standard 
C99.
-- 
Enrico `Trippo' Porreca

 dalla funzione nella quale viene chiamata.
Hai ragione, grazie per la correzione.
Ciao.
-- 
~~~~Slaine Mc Roth~~~~
**Linux User# 312607**
"I capitalisti salariavano il lavoro, pagavano il suo prezzo di mercato
e si attribuivano tutti i guadagni. Il lavoro cooperativo propone di
salariare il capitale, pagarlo al prezzo di mercato e di attribuirsi tutti
i guadagni. Sarebbe meglio e molto piu' ragionevole per la societa' e per
il progresso che gli uomini possedessero il capitale, piuttosto che il
capitale possedesse gli uomini."  (George Jacob Holyoake)