Newsgroup: it.comp.lang.c++
Titolo: Non so niente di C++. Potete aiutarmi

Sono nuovo dell'ambiente e so solo alcune cose di BASIC.
Ci sono siti che ti permetto di imparare in modo gratuito il C++.
Grazie a tutti coloro che mi risponderanno

 ha scritto nel messaggio
news:9u8qdi$69o$1...@nreadb.inwind.it...


 
http://Cicconetti-Homepage.freeweb.org
Sconsiglio il manuale in questione perché contiene errori decisamente
grossi.
Uno per tutti, dal manuale in questione:
Il nostro primo programma in C++
Il programma piů semplice che si possa immaginare č un programma che non
faccia assolutamente nulla; in C++ esso č:
// ex2_1_1.cpp
void main{
}
Ciao.

 faccia assolutamente nulla; in C++ esso è:


allora me ne potresti consigliare uno migliore (io so ben poco di c++)?
http://cpp.programmazione.it
 il tutorial di P. Marotta e dai
un'occhiata alle FAQ...
----
Lawrence "Rhymes" Oluyede
rhy...@myself.com

 (io so ben poco di c++)?
Su 
programmazione.it
 trovi l'ottimo tutorial di Paolo Marotta:
http://www.programmazione.it/Articles/corso/index.htm
Ciao.

}
Lo standard vuole che in valore di ritorno di main sia int.
Per quelli che usano void main() per risparmiarsi la fatica di
scrivere return 0 ricordo che lo standard permette di ometterlo( e fa
male, a mio avviso).
Il Ghenio
---------
These are my parting words to you:
those who give up are doomed!

male, a mio avviso).
Mi sono sempre chiesto il perché di ciň ma non ci ho mai trovato
nessun motivo logico, perché č stata scelta questa assimetria?
-- 
                    Marco Barisione (ICQ 84277092)
Se sei interessato alla creazione di un newsgroup generico in cui si
possa parlare di quei linguaggi di programmazione senza un gruppo
apposito vota per it.comp.lang su it.news.votazioni.

 nessun motivo logico, perche' e' stata scelta questa assimetria?
 
Quale asimmetria ?
In C quando non si specifica un tipo viene sottinteso un int.
Ad esempio in C e' perfettamente legale il seguente codice 
f(x) { return x+1; }
dove si assume int come tipo sia di f che di x;
In C++ questo non vale piu' (e int va specificato anche 
per il main, anche se su questo qualche compilatore chiude un
occhio) ma all'inizio venne tenuto per mantenere la compatibilita'
col C.
Perche' il main() debba tornare un intero credo che sia legato a 
motivi storici. Il valore di ritorno del main viene interpretato
come esito del programma (non dimentichiamo che il C venne "inventato"
durante la creazione di Unix nei primi anni settanta).
Saluti,
Fabio
-- 
Posted from 
flopiano.mm.eutelsat.org
 [194.214.173.28] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

col C.
All'inizio posso capire ma come è stato tolto da tutte le funzioni
perché non toglierlo anche dal main (ed è per questo che mi sembra
asimmetrico)? Non vedo grandi problemi di compatibilità.


 male, a mio avviso).
Perche' fa male ? lo standard permette di ometterlo perche' 
l'utilita' del suo uso e' implementation-dependent.  
L'unica cosa importante e' che main() sia dichiarata come 
funzione che restituisce un intero.
-- 
Posted from  [80.116.87.99] 


 motivi storici. 
Non solo, ci sono casi in cui l'uso di void main() genera dei crash.  
E' una questione di rispetto delle convenzioni di chiamata tra i 
programmi e il codice di start-up della libreria.
-- 
Posted from  [80.116.87.99] 


 All'inizio posso capire ma come è stato tolto da tutte le funzioni
*Cosa* e' stato tolto ?
-- 
Posted from  [80.116.87.99] 


 sia int.
Infatti è per questo grave errore (oltre ad altri) che ho sconsigliato
questo manuale.
Ciao.

*Cosa* e' stato tolto ?
In C++ si deve specificare il tipo di ritorno e in C no.


In C++ si deve specificare il tipo di ritorno e in C no.
Nel nuovo standard C bisogna specificare il valore di
ritorno esattamente come in C++.

ritorno esattamente come in C++.
A dire la verità non lo sapevo ma lo immaginavo, e per questo mi
domando ancora di più perché si può omettere "return 0;" in main?




Hai ragione, non avevo letto la prima parte del tuo mex.
Colpa della fretta..


l'utilita' del suo uso e' implementation-dependent.  
Aldilà della sua utilità é un'asimmetria rispetto alla regola generale
che vuole che un valore di ritorno di default sia sempre specificato
per una funzione che lo richiede.
Le asimmetrie causano spesso confusione, specie per chi deve imparare.


domando ancora di più perché si può omettere "return 0;" in main?
Perche', come gia' detto, e' irrilevante che ci sia o meno.
L'unica cosa importante e' che main() venga dichiarato come


funzione che restituisce un intero.
Scusa ma non ho capito quello che vuoi dire potresti spiegarti meglio
per favore?


per favore?
Leggi le FAQ di comp.lang.c, puo' darsi che sia io che non
riesca a farmi capire.  

per una funzione che lo richiede.
main() non e' una funzione come tutte le altre e quindi non
e' soggetta a tutte le regole comuni alle funzioni.
In C++, se non viene specificato un valore di ritorno, ne
viene inserito uno dal compilatore (0 nel caso specifico) e
quindi non c'e' alcuna asimmetria, perche' main()
restituisce comunque e sempre un valore.

 restituisce comunque e sempre un valore.
L'asimmetria sta nel fatto che main() e' l'unica funzione che puo' avere
valore di ritorno implicito e sono d'accordo con Il Ghenio sul fatto che
questo puo' generare confusione.
Ciao,
Nicola

 una funzione come tutte le altre.
No, non lo e'.  Non e' per esempio consentito dallo standard
chiamare main() in forma ricorsiva, main() non accetta altri
parametri che non siano quelli previsti dallo standard, main()
puo' restituire solo un valore intero.
main(), ribadisco, non e' una funzione come tutte le altre, 
puo' sicuramente supportare tutti i costrutti delle altre
funzioni, ma ne' se vista dall'esterno, ne' se vista dall'interno, 
e' uguale a loro, quindi l'asimmetria, se c'e', e' giustificata.
-- 
Posted from  [80.105.34.80] 




Non è così semplice. Main NON E' una funzione come le altre per molti
moltissimi aspetti. La maggior parte dei quali imprescindibili. A
memoria:
1) non segue le regole di mangling (infatti assume lo stesso "aspetto"
indipendentemente dai parametri con cui la definisci.
2) ritorna sempre un valore (ergo il default).
3) non è obbligata a generare uno stack frame ne a essere "visibile" a
livello di linker (di fatto per il linker può non esistere il main, un
compilatore può generare un entry point ed eseguire tutto il codice di
startup e quindi inserire il codice di main inline senza rispettare le
regole di chiamata a funzione).
4) non è richiamabile (non puoi chiamare main in nessun punto del
codice, come ovvio dati gli altri punti).
Quindi maiin è parecchio "asimmetrica" e il "return 0" che è facoltativo
è l'asimmetria minore di tutte.
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

è l'asimmetria minore di tutte.
Probabilmente sarà così ma le altre mi sembrano abbastanza
inevitabili, questa no.


 inevitabili, questa no.
Sul fatto che, al contrario delle altre, sia evitabile sono d'accordo.
Ma non c'è una ragione forte per evitarla dato che comunque main non è
una vera funzione (anche se ci assomiglia e quindi crea una forma di
asimmetria nel linguaggio). In altre parole imporre il return alla main
di fatto non è sufficiente a fare si che la main diventi una funzione
ordinara. Anzi: la rende più simile ad una funzione ordinaria pur se
questa non lo è. In in certo senso "nasconde" una asimmetria che in
realtà esiste comunque. Questa di per se sarebbe una ragione per NON
imporre il return.
Ma in realtà penso che usare come regola per il main il return imposto o
il return 0 implicito non faccia poi molta differenza. Quello che posso
osservare è che:
1) main è l'unico caso in cui un valore di ritorno può essere definito a
livello di linguaggio. Questo perchè il linguaggio non ha alcuna
"conoscenza" del significato delle funzioni che tu definisci ... eccetto
nel caso main dove si sa a priori che il valore di ritorno è un "exit
code" e che 0 significa "tutto bene". Quindi è l'unico caso in cui un
default può avere senso.
2) l'argomentazione sollevata nel NG per cui la regola del return 0
implicito è brutta in quanto implica una asimmetria è estremamente
debole (direi quasi errata). Infatti l'asimmetria non viene aggiunta da
quella regola ma esiste comunque. E laddove esiste una asimmetria o
irregolarità è buona norma il camuffarla il MENO possibile e il renderla
il più possibile evidente.
