Newsgroup: it.comp.lang.c++
Titolo: void main, int main

Salve,
scusate la banalità, ma non ho chiara una cosa fondamentale:
molti "tutorial" riportano la struttura di un programma minimo in C++
come
void main()
{}
ok, ma se compilo qualcosa come 
#include <iostream.h>
void main()
{
        cout << "test" << endl;
}
g++ test.cpp -o test
il compilatore g++ (gcc 3.3) mi dà errore:
test.cpp:3: error: `main' must return `int'
Se invece compilo
#include <iostream.h>
int main()
{
        cout << "test" << endl;
}
tutto ok.
Dove sta l'errore? Non si può usare void con main() o io non so usare il
compilatore? :)
ciao, grazie
-- 
Salvo

 compilatore? :)
Ciao, secondo te dove sta l'errore?
Ricorda una cosa: il compilatore raramente sbaglia.
Quello che dice il compilatore è chiarissimo "main must return int", e le
cose, secondo lo standard stanno proprio così.
Diffida di tutorial in rete che scrivono cose come
#include <iostream.h> e
void main()
rete x rete, se vuoi sapere la verità sul C++, quello che nessuno ti ha mai
detto... (sto scherzando ovviamente), vai su Thinking C++ (sto scherzando ma
non più di tanto).

 compilatore? :)
Giusto quello che dice il GCC: 'main' *deve* restituire 'int'.
(Non usare tutorial o manuali in cui appaiano "void main" o "iostream.h".) 
Max
 

 detto... (sto scherzando ovviamente), vai su Thinking C++ ...
Ci darò uno sguardo, ma ti dirò, preferisco i libri, ovviamente.
Approfondirò là, anche se di libri "beceri" in giro sul c++ ce ne sono
pure.
Di chi ci possiamo fidare?
Peccato però che da certi "tutorial" si impara solo a ...non imparare il
C++
ciao,
salvo

 (Non usare tutorial o manuali in cui appaiano "void main" o "iostream.h".)
grazie Max, seguirò il tuo consiglio, intanto domani compro anche
qualche buon libro.
Ma mi fa un po' rabbia che i "tutorial" che confodono pezzi di C e bogus
C++ siano tanti.
ciao
-- 
salvo

 void main()
Il problema è che non sono solo tutorial in rete a scrivere void main,
ma pure dispense scritte da "professori" universitari che insegnano il
C++... E non sono pochi a fare questo grave errore, e se cerchi di
farglielo notare pretendono anche di aver ragione.
Pensa che qualche anno fa ho scritto ad uno di questi professori
facendogli notare, con il giusto tatto e con il dovuto rispetto che si 
deve ad un professore universitario, che nelle sue dispense era presente
questo errore. Sai cosa mi ha risposto? Se pur in modo educato mi ha
detto che sono un povero ignorante che non ho capito cosa significhi lo
standard. Al che ho fatto notare ciò che pensava sulla questione la
persona che il C++ l'ha creato:
http://www.research.att.com/~bs/bs_faq2.html#void-main
non si è neppure degnato di rispondermi...
Ciao.
-- 
BSD is for UNIX lovers -- linux is for Windows haters.

 error: `cout' undeclared (first use this function)
Il problema che lamenti (per questo ti ho postato Hello world) è dovuto al
fatto che cout fa parte del namespace std, quindi o ti riferisci a lui e a
tutta la libreria standard con std:: oppure usi (sottointendendolo) il
namespace std.
Vedrai che s'impara. Forza e coraggio!
ciao.

 non si è neppure degnato di rispondermi...
immagino.
Se invece - prof o meno - si mettessero a correggere questi "tutorial"
sarebbe meglio per tutti.
A volte ciò che ci vorrebbe si chiama modestia intellettuale. La cosa
che spesso manca.
ciao,
salvo

 Ciao.
Ma io ti conosco? Mi sembra di si... come va?
ciao.

 Vedrai che s'impara. Forza e coraggio!
ti ringrazio.
Ho in mente il modo di pensare le cose in C, e debbo ora ripensarle in
C++
Intanto comincio da qualcosa di decisamente utile e non da tutorial poco
seri.
ciao,
salvo

 seri.
Ciao, sono sempre io (Paolo Ferraresi), è che ora ti scrivo da Linux (che mi
piace di più), ma devo lavorare anche con Windows.
Io ho programmato per oltre un decennio in C e anche io purtroppo ho avuto
grossi problemi (facciamo parte di un club non molto esclusivo).
Quando "devi" programmare a volte si ha in mente solo di fare presto e
allora avevo sottovalutato il C++ e pensavo che fosse come il C con qualche
piccola differenza (non volevo ammettere di essere un vecchio dinosauro dei
linguaggi procedurali, volevo fingere di poter programmare ad oggetti).
Quindi scrivevo porcherie. Avevo capito comunque come si usavano le classi,
i template e tante altre cose, (sono un autentico mangia-libri e imparavo
un nuovo linguaggio in meno di una settimana) ma quando concepivo le mie
idee, erano comunque e inesorabilmente ancora in C, ancora non
object-oriented.
Quando arrivi alla consapevolezza che il salto da C a C++ è una questione
puramente mentale e che l'aspetto "tecnico" delle nuove sintassi con le
quali dovrai fare i conti è il meno (ma va comunque imparato), allora avrai
compiuto il passo più grande.
Appena io ho compreso questo ho investito del tempo e mi sono letto parecchi
libri *DA ZERO* facendo finta d'ignorare le mie precedenti esperienze
(quelle torneranno ad esserti d'utilità dopo... e fanno parte della cultura
di un programmatore).
Se impari dai "big" e vedi come ragionano loro (non tanto il codice in se,
ma come viene organizzato il problema prima del software, il design ed il
metodo col quale si arriva poi a definire di quali classi hai bisogno e
come dovrebbero essere) forse non diventi bravo come loro (almeno è così
per me) ma sicuramente di strada ne farai tanta e ti leverai le tue
soddisfazioni comunque.
Prenditi una breve pausa (se puoi) dai tuoi progetti software, studiati bene
qualche libro (ad esempio quelli che ti ho consigliato) ma ce ne sono altri
buoni anche in libreria (a proposito io non conosco il tuo, ho studiato su
altri, mi spiace) e vedrai che guarderai ai tuoi programmi in altro modo.
Se poi hai problemi pratici puoi sempre rivolgerti a questo ng per
chiarimenti, saremo felici di affrontare problemi che riguardano in C++
(standard).
ciao e auguroni.
Paolo Ferraresi.

 seri.


 seri.


 (standard).
grazie Paolo, della gentilezza e dell'invito.
Cercherò di non rompere molto con domande sceme.
Non mi occupo di cose come "Visual C" o "C sharp", solo di C++ standard,
più dell'aspetto teorico che della programmazione pratica, almeno per
ora.
ciao,
-- 
Salvo Micciché


Ti hanno gia' risposto, volevo solo precisare una cosa...
Quei tutorial non sono "sbagliati", solo si rifanno ad uno standard
vecchio.
Il C++ e' un linguaggio che si sta ancora evolvendo e quello che era
giusto/lecito/valido per un compilatore di qualche anno fa, non funziona
piu' con i compilatori di oggi: lo standard e' cambiato.
Controlla sempre la data di pubblicazione dei tutorial/libri/dispense
che leggi; l'ultimo standard del C++, se non sbaglio (se no
correggetemi), e' del '97; diffida di roba piu' vecchia.
 bye
	av.

 correggetemi), e' del '97; diffida di roba piu' vecchia.
diffido, ma molti tutorial che trovo in giro sono 2000-2004, purtroppo.
ciao,
Salvo

 correggetemi), e' del '97; diffida di roba piu' vecchia.
'98
-- 
Gerolamo

 sapreste dirmi com'è?
Non lo conosco, sorry.
Ma gli  Schaum's non mi sono mai piaciuti particolarmente (questione
di gusti, forse...)
Cartacei ed in italiano trovi il libro di Lippman-Lajoie
(ottimo per iniziare) e quello di Stroustrup (ottimo come reference)
http://www.gorilla.it/gorilla/product.asp?sku=8871920716&dept%5Fid
http://www.gorilla.it/gorilla/product.asp?sku=8871920783&dept%5Fid
Anche il già consigliato Bruce Eckel è secondo me molto buono.
E lo trovi anche in libreria, oltre che gratis in PDF dal sito dell'autore
:-)
-- 
Gerolamo

 E lo trovi anche in libreria, oltre che gratis in PDF dal sito dell'autore
bene, li cercherò, vediamo cosa riesco a trovare :)
ciao,
Salvo
-- 
#!/usr/bin/perl
print "NeXT tip => /me == (~§alvomi©~ @ddress) - (Alfa kai Omega) \n";

 vecchio.
No, sono proprio sbagliati.
In C++ main ha sempre restituito un "int" fin dalla nascita del
liguaggio (primi anni 80).  In C (predecessore del c++) main ha sempre
restituito un "int" dalla nascita (1970 circa); nelle prime versioni
del C void non esisteva.  In B (predecessore del C) l'unico tipo era
piu` o meno l'equivalente del l'"int" del C.
Per caso quei tutorial sono stati scritti negli anni 50?
        Mauro

 Per caso quei tutorial sono stati scritti negli anni 50?
saranno stati scritti da persone che hanno sempre usato compilatori 
Microsoft o Borland
-- 
Hai recensioni nel cassetto di musica, cinema, letteratura,fumetti??
Ascolta e pentiti e se hai tempo vergognati
http://tonysuper.altervista.org

 Microsoft o Borland
Confermo, io spesso uso il Borland perché vado matto per l'ottimo debugger
che incorpora (poi ripasso il codice al mingw32 o al g++).
Il Borland è un autentico COMPILATUTTO (ti fa passare di tutto, senza
nemmeno emettere un warning).
Una volta pensavo che solo per il fatto che mi compilasse il codice, questo
fosse corretto C++, invece ho fatto brutte figure...
Ho dovuto lavorare come un matto a riscrivere in parte codice che avevo
fatto (evidentemente mi ero sbagliato io, dato che nessuno mi avrebbe
impedito di scrivere le cose "a-modo"), per farlo compilare su altri
compilatori (che mi generavano liste infinite di errori).
Questo per mettere in guardia chi deve imparare a programmare...
ciao.

 non si č neppure degnato di rispondermi...
Chiamare un tizio del genere "professore" e' offensivo! Dovrebbe andare 
ai lavori forzati :-) se gli manca un minimo di umilta' e intelligenza 
di riconoscere i propri errori.
Ciao

 bene, li cercherň, vediamo cosa riesco a trovare :)
Anche io concordo su Lippman e/o Stroustrup (che e` qui di fianco vicino
a me... il Lippman appena piu` in la.. e si... anche io talvolta lavoro
in C++ ;) )
-- 
RiK0
Non credo negli schemi non vincenti.

 Questo per mettere in guardia chi deve imparare a programmare...
lunga vita a -Wall ;)


 lunga vita a -Wall ;)
e -pedantic dove lo metti?
ciao.

 
e uno bello striscione con  abbasso "Il linguaggio è cio' che implementa 
il mio compilatore" non lo facciamo?


 e -pedantic dove lo metti?
Sinceramente -pedantic lo uso solo se voglio fare un programma 100%
ANSI.
In quel caso mi e` molto utile. :)


 e si... anche io talvolta lavoro in C++ ;) )
eheh, vedo :)
non si puň dire che tu non sia iperattivo :)
ciao!
salvo
-- 
#include <iostream>
using namespace std;
cout << "Grazie a tutti, siete meravigliosi.\n";
// salvo

 Al momento vedrň domani  o domani l'altro questo di J. Hubbard.
Io li guarderei entrambi e poi deciderei quale mi piace di piu`.
Ma averli entrambi e` abbastanza inutile. O meglio... non necessario :)


 Ma averli entrambi e` abbastanza inutile. O meglio... non necessario :)
è vero, devo girarmi un bel po' di librerie per farlo, ma dubito che qui
ne troverò una che li abbia entrambi, sicché mi dovrei fidare dei
sommari pubblicati online, ad es. su Librinformatica.
Intanto, a parte Hubbard, che avevo già ordinato, comincio a pensare al
prossimo ordine :)
ciao,
salvo

)
e devo dire che non sembra male, e - vista la nostra discussione - non
transige sullo standard: niente <.h> per gli includes e niente "void
main", ad esempio, ed aderenza dichiarata a ANSI/ISO 1998 (Prefazione).
Esempi, grafici ed esercizi sono sempre apprezzati dagli absolute
beginners :-)
Vari appendici con parole chiave dello standard, classi contenitore e
algoritmi generici sono molto utili come prontuari.
Grazie dei consigli.
Salvo

 }
[CUT]
Si usa:
#include <iostream>
using namespace std;
 int main()
{
    cout << "test" << endl;
    return 0;
}
Altrimenti con i compilatori piu' recenti ottieni errori e warning (poi
perche' ci si ostini a scrivere void main proprio non lo capisco)
CIao
Rude

 perche' ci si ostini a scrivere void main proprio non lo capisco)
e infatti, non si capisce neppure perché si continui a tenere on line
tutorial scorretti e fuorvianti.
ciao, grazie
Salvo

 Ma averli entrambi e` abbastanza inutile. O meglio... non necessario :)
In realta' non e' male averli tutti e due, perche' capita che alcuni
argomenti siano spiegati meglio sull'uno piuttosto che sull'altro.
Diciamo che e' un'opzione da perseguire senza indugio, a patto che
almeno uno dei due lo paghi la ditta ;-)
Ciao,
Nicola

 almeno uno dei due lo paghi la ditta ;-)
mi sanno di 40-50 eurozzi l'uno (io ne presi uno in lire e uno in
dollari :) )
quindi si... sono d'accordo con te :)


 che spesso manca.
Già, a molti professori...
Ciao.
-- 
BSD is for UNIX lovers -- linux is for Windows haters.

 Ma io ti conosco? Mi sembra di si... come va?
Non molto bene a dire la verità, ma si tira comunque avanti...


 di riconoscere i propri errori.
Purtroppo questo genere di mancanza è abbastanza diffusa fra i
professori.


 Gią, a molti professori...
e non solo...
ciao :)
Salvo