PDA

View Full Version : che linguaggio tra C e C++?


FrankPayne
12-07-2006, 00:48
Da premettere che devo studiare uno dei due. Alcuni dicono che conviene prima imparare C e poi passare in C++. Altri dicono che è meglio iniziare direttamente con C++ che è più semplice a livello di codice e fa tutto quel che C può fare. Cosa mi consigliate ad un neofuturoprogrammatore? :doh: :help:

71104
12-07-2006, 01:45
devi decidere da solo, qui non otterrai mai una risposta univoca ad una domanda del genere ( :asd: ); anche se ti rispondono alla fine toccherà a te decidere quale risposta prendere in considerazione, quindi non hai concluso granché :D

dulcis in fundo, posso concederti una considerazione molto saggia, che non risponde direttamente alla tua domanda ma quantomeno va molto oltre le semplici risposte "C" e "C++". la considerazione è la seguente: dipende da cosa vuoi fare; the right tool for the right job. prima scegli la tua strada, poi torna qui e riponi la stessa domanda in questi termini: "quale linguaggio è migliore per fare questo, questo e quell'altro?"

sicuramente otterrai risposte molto più utili.

infine per confonderti un po' le idee aggiungo che la tua domanda non ha molto senso: se impari C++ impari implicitamente anche C, tranne qualche minima differenza tra i due linguaggi limitata comunque alla sola sintassi; concettualmente il C++ è un sovrainsieme del C.

Black imp
12-07-2006, 02:10
quando programmi in c++ sei costretto o ti viene comodo usare spesso librerie scritte in c. per es. se usi le opengl fino ad oggi sei obbligato. personalmente adoro il c++ perchè per me rimane il linguaggio di alto livello più potente e con più strumenti per strutturare tuttavia il c quando devi accedere ai devices a basso livello è più comodo perchè in quei casi ti serve meno strutturare. il c++ per certi versi, dove non si usano le classi, è più lasco nel senso che ti permette di fare delle cosucce sulle quali il c è più rigido. in buona sostanza io non riuscirei a dirti di scegliere uno o l'altro. io studierei prima il c e poi passerei al c++ ma il problema non sono le differenze sintattiche ma proprio la logica che sta sotto un programma e il modo di strutturare un programma in c e uno in c++ che è ben diversa. sotto ci sono sempre i concetti di tipo opaco ma si aggiungono quello di ereditarietà di varianza e controvarianza nell'utilizzo di una classe o una sua figlia come parametri ecc. insomma se vuoi davvero imparare a programmare la cosa che ti servirà prima o poi è un bel libro di ingegneria del software magari con un po' di assembly che ti spieghi, almeno per cenni, quello che succede a basso livello e che soprattutto ti spieghi quali meccanismi esistono e si vogliono implementare nei vari linguaggi, quale logica c'è dietro. la sintassi di un linguaggio è meno importante di questi concetti. Usare costruttori di tipo come le classi senza avere ben capito la logica che le sottende è solo un modo di fare casino e scrivere programmi sporchi e con una struttura mal fatta. per iniziare comunque a impratichirti con il linguaggio lascerei stare il c++ e comincerei col c. io mi trovo da dio con questo libro: C Didattica e Programmazione di AL KELLEY e IRA POHL della addison-wesley. lo consulto spesso per fare programmi di diverso tipo anche quando scrivo in c++. Per il c++ , come libro didattico per me è eccellente il Lippman sempre della addison-wesley : Corso di programmazione C++.
E' molto utile anche lo stroustrup, che ha inventanto il c++, però è molto meno didattico per chi inizia. Insomma prima assaggia e entra 'nel clima' poi più avanti se ne senti l'esigenza approfondisci l'ing. del software e studia c++.

ps

71104 mi sa che nellla prima frase che hai in firma manchi un 'manent' :D

71104
12-07-2006, 03:51
71104 mi sa che nellla prima frase che hai in firma manchi un 'manent' :D no, c'è tutto, mica ci va il manent... :mbe:

la traduzione sarebbe: le parole volano, le cose scritte pure se ci fai l'aeroplanino :D

Black imp
12-07-2006, 04:56
no, c'è tutto, mica ci va il manent... :mbe:

la traduzione sarebbe: le parole volano, le cose scritte pure se ci fai l'aeroplanino :D


ommadonna hai ragione ho tradotto etiam con anche se invece di anche :D

AngeL)
12-07-2006, 09:22
io ti consiglio di iniziare col c++ e una volta che ci hai preso familiarita di imparare la sintassi del c, visto che l'unica differenza e la sintassi e qualche funzione in piu nel c++
p.s. 71104 ora traduci anche la seconda :D

shinya
12-07-2006, 10:11
visto che l'unica differenza e la sintassi e qualche funzione in piu nel c++

Probabilmente hai bisogno di libro migliore su cui studiare C++.

franksisca
12-07-2006, 10:35
Opinione MOOOLTO Personale:

Impara il C++, sicuramente il linguaggio ad oggetti più veloce.

C lo siu usa per applicativi più "seri", quando lavori a livello più vicino all'HW.
C++ ci fai quello che vuoi, e te lo dice uno che ancora non ha avuto il tempo di mettersi a fare qualcosa di serio con C++.


Non resisto, devo chiedertelo:
Perchè C o C++, e invece non menzioni JAVA???

AngeL)
12-07-2006, 10:39
Probabilmente hai bisogno di libro migliore su cui studiare C++.
cosa ce che non va? le differenze sono la sintassi e alcune funzioni della oop.
qualcosa in contrario? :eh:

Andlea
12-07-2006, 11:45
Si, parecchio
La programmazione oo non sono solo "qualche funzione in più"(che già di per se non significa molto)
Inoltre non vedo dove sia diversa la sintassi. E' stata mantenuta la sintassi del C(proprio perchè conosciuta dai più, e dato che il passaggio da C a C++ è più naturale) per poi essere estesa.

AngeL)
12-07-2006, 11:54
per funzioni in piu intendevo l'oop, l'overloading delle funzioni ecc.
e poi, riguardo la sintassi, secondo te
cout << "Hai "<< anni << " anni";
è uguale a
printf ("Hai %d anni",anni);
?

Andlea
12-07-2006, 12:00
L'oop non è una funzione, è un modo completamente diverso dal programmare rispetto al procedurale.(il mio vecchio prof di ing del sw ti ucciderebbe :D )

La sintassi è diversa perchè stai facendo due cose diverse con due librerie diverse, non vedo cosa c'entri.
Anche in c++ puoi usare la printf() e la sintassi è la stessa.
Poi come ho detto il linguaggio è stato esteso con gli iostream, ma non vuol dire cambiare la sintassi

thebol
12-07-2006, 12:34
io ti consiglierei il c++. Parti subito con lo sviluppo in OOP(e qua oltre a un buon libro sul c++ ti servirebbe un buon libro sulla programmazione a oggetti, non di quelli che ti spiegano comè fatta, ma di quelli che ti spiegano quando e come usarla, che è tutta un altra cosa), che è un paradigma di programmazione piu avanzato della programmazione procedurale.


altrimenti ti avrei consigliato java. E meno potente(meno controllo sulla memoria, no overload degli operatori, no ereditarietà multipla), ma molto piu semplice, visto che devi stare dietro a meno cose.

E la potenza in meno(apparte per la gestione della memoria, che non è essenziale avere in tutti gli ambiti) la senti veramente poco.

71104
12-07-2006, 12:36
FrankPayne, le risposte provenienti dai membri del team di Diamond Crush sono di parte :asd:

tranne la mia che è saggia e generica :O

shinya
12-07-2006, 12:39
cosa ce che non va? le differenze sono la sintassi e alcune funzioni della oop.
qualcosa in contrario? :eh:

C++ è un linguaggio molto complesso. Ti faccio un esempio preso così a caso (da wikipedia):

template <int N>
struct Factorial
{
enum { value = N * Factorial<N - 1>::value };
};

template <>
struct Factorial<0>
{
enum { value = 1 };
};

// Factorial<4>::value == 24
// Factorial<0>::value == 1


Secondo te le differenze dal C si limitano alla sintassi e l'oop (che già di suo è una cosa grossa, se consideri anche la gestione delle eccezioni, ecc)?? Se poi tiriamo fuori, come nell'esempio, le tecniche di metaprogrammazione via template, le differenze aumentano di molto.

FrankPayne
12-07-2006, 12:43
Ok deciso, imparo C. Grazie per le risposte

AngeL)
12-07-2006, 12:45
io ho detto di imparare il c++, ma non imparare nel senso di imparare alla perfezione classi, template ecc, intendevo imparare in generale, per poi capire come si fanno le stesse cose in c, in modo da confrontare, ocme ho fatto io, visto che non sono due linguaggi diversi.
se poi nn e un buon metodo, allora..

Black imp
12-07-2006, 12:52
Ok deciso, imparo C. Grazie per le risposte


;)

mi raccomando ricordati che il concetto di interfaccia e di tipo astratto opaco lo puoi anzi lo DEVI sviluppare anche in C solo che è meno protetto e che queste cose non te le spiegano i manuali dei linguaggi.

maxithron
12-07-2006, 13:25
io ho detto di imparare il c++, ma non imparare nel senso di imparare alla perfezione classi, template ecc, intendevo imparare in generale, per poi capire come si fanno le stesse cose in c

E che quindi significherebbe NON avere imparato niente del C++.


, in modo da confrontare, ocme ho fatto io, visto che non sono due linguaggi diversi.
se poi nn e un buon metodo, allora..

E' qui che secondo me hai bisogno di approfondire di più. Sono diversi, non sono uguali.

il_luridone
12-07-2006, 13:41
Come fate a confrontare due linguaggi di programmazione solo dalla loro sintassi?

Fin da subito andava detto che il C++ è un linguaggio orientato agli oggetti, mentre il C non è altro che un linguaggio procedurale, un assembly un po' meno ostico.

Quindi anche se sintatticamente il C++ è un sovrainsieme del C, sono due linguaggi che usano due paradigmi diversissimi.

Se vuoi studiarti il C, pigliati un tutorial e comincia a provare a buttare giù qualche riga di codice. Può esserti utile per prendere confidenza con le basi della programmazione. Poi dimentica tutte le abitudini che hai preso perchè saranno veleno egli altri linguaggi.

Se vuoi studiarti il C++, prendi un libro o un sito che ti spieghi bene i concetti della programmazione agli oggetti (ereditarietà, interfacce, overloading, classi, oggetti, etc.) poi a quel punto puoi pigliarti un libro di C++ o di java per vedere come i vari linguaggi implementano il paradigma a oggetti.

Black imp
12-07-2006, 13:42
Angel C e C++ hanno la stessa sintassi sono i costrutti e la LOGICA che sta dietro che è completamente diversa.

71104
12-07-2006, 17:42
Angel C e C++ hanno la stessa sintassi tranne qualche piccola differenza però ;)

e senza contare ovviamente tutte le keyword C++ che il C non ha

71104
12-07-2006, 17:44
Fin da subito andava detto che il C++ è un linguaggio orientato agli oggetti, mentre il C non è altro che un linguaggio procedurale, un assembly un po' meno ostico. no, è un paragone assurdo, le differenze (non sintattiche) tra C e assembly sono troppe.

il_luridone
12-07-2006, 18:06
no, è un paragone assurdo, le differenze (non sintattiche) tra C e assembly sono troppe.
sì, tra C e assembly non voleva essere un paragone calzante era più una citazione tra le righe: "The C Programming Language - A language which combines the flexibility and power of assembly language with the readability and maintainablity of assembly language." :asd:

Black imp
12-07-2006, 18:08
tranne qualche piccola differenza però ;)

e senza contare ovviamente tutte le keyword C++ che il C non ha


cerco di dare risposte utili e tarate su chi fa la domanda più che per fare vedere che mi ricordo quanti peli nel culo aveva stroustrup quando ha pensato ai template :rolleyes:


:D

Black imp
12-07-2006, 18:10
sì, tra C e assembly non voleva essere un paragone calzante era più una citazione tra le righe: "The C Programming Language - A language which combines the flexibility and power of assembly language with the readability and maintainablity of assembly language." :asd:


sei sicuro che sia giusta anche la parte finale? :mbe:

il_luridone
12-07-2006, 18:22
ironizza sulla leggibilità e la mantenibilità del C

peppedx
12-07-2006, 19:20
WOW non sapete quanto mi faccia piacere trovare questa discussione.

Sono STRASTANCO di gente che dice di conoscere il C/C++ o che sa programmare in C++ perchè sa mettere le funzioni dentro una classe.

Sono 2 linguaggi diversi cacchio! TREMENDAMENTE.

Sono molto molto pochi quelli che secondo me sanno davvero programmare in C++!

PS. non mi uccidete ma ritengo anche che il C++ sia unlinguaggio troppo complesso: hanno cercato di accontentare troppi stili: come il C/programmazione Generica/OOP: l'hanno reso un inferno.Da quando ho scoperto JAva...beh so che è criticabile, ma ho deciso di usare per quanto possibile Java stesso e in caso di necessità di + basso livello, maggior controllo o prestazioni (ma non sono casi poi così comuni, non scrivo ne kernel ne driver ne videogiochi) usare il C.

saluti!

71104
12-07-2006, 19:28
cerco di dare risposte utili e tarate su chi fa la domanda più che per fare vedere che mi ricordo quanti peli nel culo aveva stroustrup quando ha pensato ai template :rolleyes: io cerco semplicemente di dare risposte corrette :Prrr:

te invece te ne vai ad impelagarti con la taratura e coi peli di Stroustrup... :O

umbio
12-07-2006, 21:58
Da premettere che devo studiare uno dei due. Alcuni dicono che conviene prima imparare C e poi passare in C++. Altri dicono che è meglio iniziare direttamente con C++ che è più semplice a livello di codice e fa tutto quel che C può fare. Cosa mi consigliate ad un neofuturoprogrammatore? :doh: :help:


Ciao Frank, troppo spesso ho visto la tua domanda e letto gli interminabili post che la seguono, ed il motivo e' che una risposta alla tua domanda non ha senso.
Imparare un linguaggio di programmazione non vuol dire saper programmare, allo stesso modo come conoscere il russo non significa saper sostenere una conversazione di diritto internazionale (o astrofisica) in russo.
Quello che voglio dire e' che imparare un linguaggio di programmazione e' una cosa banale dal momento che la sintassi (del c o c++ per esempio) si basa su un numero limitato di costrutti e non servono piu 7gg per imparare ad usarli. Discorso diverso e' invece utilizzare il c/c++ per scrivere giochi, per esempio, dove e' necessario sopratutto padroneggiare le tecniche (scrolling, tiling, AI, fisica, solo per rimanere nel 2D).
In conclusione il mio consiglio e' di cominciare a prendere confidenza col c (che non guasta mai), scarica, prova e studia il codice che trovi per la rete, analizzalo fino nei dettagli. Vedrai che a poco a poco prenderai confidenza anche con le piu' utili caratteristiche del c++ (OOP e classi).
una volta raggiunta la giusta forma mentis, programmare in un linguaggio o in un altro sara' per te solo il fastidio di una diversa sintassi.

In conclusione il mio consiglio e' sii testardo, never give up! Imparare a programmare e' un percorso senza fine, non esistono programmatori "arrivati" alla fine del loro percorso di conoscenza.


umbio
FeejoSoft developer
www.feejo.com
[email protected]

FrankPayne
12-07-2006, 22:02
Ciao Frank, troppo spesso ho visto la tua domanda e letto gli interminabili post che la seguono, ed il motivo e' che una risposta alla tua domanda non ha senso.
Imparare un linguaggio di programmazione non vuol dire saper programmare, allo stesso modo come conoscere il russo non significa saper sostenere una conversazione di diritto internazionale (o astrofisica) in russo.
Quello che voglio dire e' che imparare un linguaggio di programmazione e' una cosa banale dal momento che la sintassi (del c o c++ per esempio) si basa su un numero limitato di costrutti e non servono piu 7gg per imparare ad usarli. Discorso diverso e' invece utilizzare il c/c++ per scrivere giochi, per esempio, dove e' necessario sopratutto padroneggiare le tecniche (scrolling, tiling, AI, fisica, solo per rimanere nel 2D).
In conclusione il mio consiglio e' di cominciare a prendere confidenza col c (che non guasta mai), scarica, prova e studia il codice che trovi per la rete, analizzalo fino nei dettagli. Vedrai che a poco a poco prenderai confidenza anche con le piu' utili caratteristiche del c++ (OOP e classi).
una volta raggiunta la giusta forma mentis, programmare in un linguaggio o in un altro sara' per te solo il fastidio di una diversa sintassi.

In conclusione il mio consiglio e' sii testardo, never give up! Imparare a programmare e' un percorso senza fine, non esistono programmatori "arrivati" alla fine del loro percorso di conoscenza.


umbio
FeejoSoft developer
www.feejo.com
[email protected]


Ok grazie :D

Black imp
12-07-2006, 22:39
ironizza sulla leggibilità e la mantenibilità del C

ah ok era voluta! :D