Newsgroup: it.comp.lang.c++
Titolo: Consiglio

Ciao a tutti!
Vorrei specializzarmi nella creazione di agenti, spider e robot per
internet: mi consigliate il c o il c++?
Grazie e buon lavoro!
Massimo Montanari
max67...@telcanet.it
togliete nospam dall'indirizzo



internet: mi consigliate il c o il c++?
Certamente il C++: puoi fare tutto quel che fai in C piu` altro ancora!
Alex

 Certamente il C++: puoi fare tutto quel che fai in C piu` altro ancora!
Il che non e' necessariamente un bene, pero' :)
Ogni tanto quando mi trovo tutta la roba "tipo integer" (char, int,
long) che viene convertita allegramente l'una nell'altra senza dirmi
nulla non e' che sono proprio contento.....
Alberto
-- 
Alberto BARSELLA
PGP fingerprint = 13 3F 22 D2 0B 0A D3 25  F1 89 FE B5 82 AD 75 2A
** Beliefs are dangerous. Beliefs allow the mind to stop functioning.
A non-functioning mind is clinically dead.  Believe in nothing... **

 Il che non e' necessariamente un bene, pero' :)
Non sono d'accordo con nessuno dei due :)
Non sarebbe più ortodosso dire che, al di là delle apparenze, sono due
linguaggi completamente diversi?
O forse tengo tanto al C perchè provengo dall'ambiente Unix?
-julio di egidio
ju...@webzone.it

 linguaggi completamente diversi?
Cosi' completamente diversi che un compilatore C++ e' in grado di
compilare un programma C? ;)


 compilare un programma C? ;)
una domanda del genere ti causerebbe una valanga di flame in
news:comp.lang.c o news:comp.lang.c++ :)
Sì, dietro la notevole somiglianza, sono *molto* diversi, ovvero ci sono
alcune sottigliezze che li rendono non interscambiabili, a meno di non
scrivere codice inaffidabile. Tant'è che nelle preferenze del
compilatore decidi se stai compilando C o C++.
Giusto un paio di esempi salienti - ma se ne potrebbero fare altri:
1) in C un puntatore "void*" viene automaticamente convertito nel tipo
di puntatore che si trova sul lato sinistro dell'assegnamento; questa
conversione _non_avviene_ in C++; in particolare, in C++, è necessaria
una conversione esplicita; es.:
pint = malloc(sizeof(int));         /* questo è C */
pint = (int *)malloc(sizeof(int));  /* questo è C++ */
ora, è da notare che la versione C verrebbe neppure compilata da un
compilatore C++ standard;
ma è ancora più interessante analizzare il caso contrario, ovvero
compilazione del codice C++ da parte di un compilatore C:
in C il compilatore fa automaticamente il cast oppure, in caso di
problemi, genererebbe un warning a dire "hey, c'è un assegnamento
sospetto alla linea X"; sei fai invece il cast esplicito, stile C++, il
compilatore pensa - a torto? ;) - che tu sappia esattamente quello che
stai facendo, quindi nessun warning viene generato; in sintesi, i cast
in C sono facoltativi e fortemente scoraggiati a meno di esigenze
*particolari*, pena l'incapacità del compilatore di scovare errori.
2) l'interazione fra un programma ed il suo hosting environment è
talmente diversa fra C e C++ che le seguenti sono le dichiarazione
praticamente *obbligatorie* nei due casi:
int main(...) /* C */
{
  ...
  return an_exit_value;
}
void main(...) /* C++ */
{
  ...
}
Non che "void main(...)" non venga compilata in C, ma ci sono una
montagna di altri processi che si potrebbero trovare ad invocare il tuo,
e tu rifiuti di ritornargli un exit code - con risultati imprevedibili.
Non ricordo per quale ragione lo stesso non vale in C++, ma io NON sono
un programmatore C++ :)
Ciao, julio di egidio
ju...@webzone.it

nulla non e' che sono proprio contento.....
Esattamente come in C.  Un compilatore veramente buono ti
potrebbe permettere di chiedere warning per ciascuna di queste
conversioni automatiche (ahime`, pochi ce ne sono...!).
Alex

O forse tengo tanto al C perchè provengo dall'ambiente Unix?
Non puo` essere solo questo!  "Vengo da Unix" anch'io (scommetto
che ho sviluppato per piu` varianti Unix di te... SCO, Interactive, AIX
2, AIX 3 [completamente diverse!], AIX/370, HP/UX [tante versioni],
Sun/Os [idem] e Solaris [ditto], Linux, BSD, Irix, Ultrix, OSF/1, Apollo
Domain in sapore Unixoide, e non scordiamoci Xenix...!) -- ma sono
saltato sul C++ come un pesce nell'acqua (dopo una prima esperienza
spiacevole nel 1984/85 quando era ancora troppo "instabile" per farci
su vero software professionale, a mio giudizio...!).  Dopo avere praticato
e insegnato C, e poi ANSI C, a tutti i livelli, naturalmente.  Forse il
fatto
e` che ho sempre "tenuto d'occhio" anche altri mondi -- DOS a parte,
anche VMS, IBM VM/CMS, VM/SP, e MVS, e sistemi operativi vari di
natura sperimentale come Minix, Amoeba, Mach... e soprattutto, vari
linguaggi come CLU, Ada, Simula, Icon, ML, CAML, Pascal in ogni
salsa, Fortran idem, LISP, CLOS, Eiffel, Sather, perl, TCL, shell vari
assortiti, REX e poi REXX, DWIM, Modula-2, Modula-3, Oberon... e
non parliamo neppure dei vari Dylan, Java, Objective-C, C@@, e gli
assembler piu` incredibili... penso che la stessa *vastita`* della mia
prassi, cultura, e interessi informatici, mi abbia aiutato molto a tenere
nella giusta prospettiva i vari sviluppi, soprattutto quei rami di OO e
Generic Programming che, assieme al C, nella loro convergenza ci
hanno dato il C++...
Alex

un programmatore C++ :)
Si vede.  Quindi non sproloquiare del C++, del quale e` clamorosamente
chiaro che non capisci nulla, e resta eventualmente sul gruppo del C.
Alex

 chiaro che non capisci nulla, e resta eventualmente sul gruppo del C.
Ehi, l'hai presa proprio male! Peccato, poteva essere un'occasione per
andare oltre i soliti "scusate, come si fa a...".
Never mind.
-julio
ju...@webzone.it

nulla non e' che sono proprio contento.....
Da questo punto di vista, gli standard C e C++ prevedono esattamente lo
stesso comportamento.  C'e` di peggio: anche float e double sono
convertiti in long, int, persino char, a norma di standard...!  Questo
e`, secondo me, un chiaro difetto del C, non rimuovibile per ragioni
di compatibilita`, e sempre per compatibilita` e` stato propagato
in C++.  Un compilatore puo`, se vuole, dare comunque tutti i warning
che ritiene opportuni (lo ricordate quel vecchio Turbo C che dava
warning per "char c; c='a';" perche` il tipo della costante 'a' e` _int_,
non _char_...?  Almeno questo dettaglio in C++ e` stato fixato...!-).
Alex
--
 ____    Alex Martelli, Bologna, Italia -- email: 
al...@magenta.com
 \SM/___                                 
http://magenta.com/~alex
  \/\bi/     You never know what is enough unless you know what
     \/          is more than enough.

e`, secondo me, un chiaro difetto del C
macche' difetto !! ;) Secondo me e' corretto, che senso ha avvisare il
programmatore di una cosa perfettamente lecita ?
Il compilatore emette correttamente un warning quando c'e'
effettivamente una perdita di precisione, ad esempio quando si assegna
un long ad un char o un double ad un float, un warning anche in senso
inverso non avrebbe molto senso. :)
Gianpaolo Bottin
- Live Long and Prosper -

effettivamente una perdita di precisione, ad esempio quando si assegna
Mica sempre, ad esempio VC++ compila questo:
    int corto(short d) { return d; }
    int dd(int d) { return corto(d); }
senza warning, pur avendo short di 16 bit e int di 32 (perdita di
precisione).
L'"allargamento" puo` anche far perdere _precisione_; per esempio,
non e` detto che un float possa rappresentare *precisamente* tutti i
valori degli int (e infatti, se entrambi a 32 bit, non puo`).  Qui almeno
si perdono bit meno significativi, pero` si perdono.
Non parliamo delle confusioni e ambiguita` che possono nascere
con overload e/o template e questa chicca -- quelle, effettivamente,
sono patrimonio solo C++, non C, comunque mostrano che prezzo
paghi C++ per questa "feature ereditata"...
Comunque non sono uno per le sterili lamentele, ma dei "trucchi
e trabocchetti del C" (per citare il grande libro di Koenig) e` meglio
essere avvisati, e tanti credono di potere contare sui warning, e
invece poi magari...
Alex


invece poi magari...
certo, non metto in dubbio che il C++ abbia dei comportamenti che per
il neofita o per chi arriva da altri linguaggi possano sembrare
strani, per chi invece ha usato il C per anni come il sottoscritto a
volte anche i warning che da' il C++ sono una seccatura. So benissimo
che assegnare un double ad un float mi fa perdere di precisione, e'
inutile che il compilatore me lo ricordi ogni volta, se l'ho fatto
c'e' un motivo mannaggia a lui !! :) 
Scherzo, un certo livello di warning e' utile pero' "troppi" warning
rischiano di far diventare il C++ come il pascal dove devi usare una
funzione ogni volta che converti un tipo in un altro.
