PDA

View Full Version : [C/C++]Rifare le basi, ma come?


pio10021
03-07-2013, 16:57
Da un po'(che poi per problemi vari in cui non ho avuto tempo non è da molto tempo) uso il C/C++ che mi ha un po' appassionato, il problema è che ho studiato su vare guide su internet e ho una "conoscienza" un tantino" "frammentata", in pratica mi mancano alcune importanti basi e mano a mano che provo a fare qualcosa me ne accorgo sempre di più.
Anche perchè pultroppo saltai parte delle basi(buona parte, non dico tutte ma siamo lì; ciò che mi è servito per programmare ciò che ho programmato lo ho imparato, per buona parte, dagli errori che ho fatto, però devo ammettere che sanno spiegare meglio di tutta la schifosa documentazione che gira su internet sulla programmazione, mi stò riferendo a quella sù librerie specifiche) per passare ad allegro.h(liberia per la gestione multimediale, orientata sui videogiochi 2D), che per fortuna ho imparato bene, ma sento sempre più il bisogno di dover farmi quelle basi e forse rifare anche alcune che so già e che magari ho dimenticato.

Volevo un consiglio su un manuale o qualunque cosa che riesca a farmi fare le basi della programmazione C/C++(tenendo conto che non sono uno che stà iniziando ora, ma che qualcosa so già).

Lo chiedo perchè voglio essere sicuro, stavolta, di studiare su buon materiale che mi porti a sapere bene le basi, non sul primo manuale che trovo su ebay insomma; proprio per questo lo sto chiedendo quà.
Per sintetizzare volevo evitare di ricominciare da capo con la programmazione ed evitare di aver perso tempo, studiando su un buon manuale che riesca a mettermi sù quelle basi che mi mancano(per sapere quale manuale chiedo a voi)

Con manuale comunque non intendo perforza cartaceo, mi vanno bene anche buone guide, basta che però siano buone.

Qualcuno può consigliarmi qualcosa?

Grazie in anticipo per le risposte

(r3((h3r
03-07-2013, 18:13
Da un po'(che poi per problemi vari in cui non ho avuto tempo non è da molto tempo) uso il C/C++ che mi ha un po' appassionato, il problema è che ho studiato su vare guide su internet e ho una "conoscienza" un tantino" "frammentata", in pratica mi mancano alcune importanti basi e mano a mano che provo a fare qualcosa me ne accorgo sempre di più.
Anche perchè pultroppo saltai parte delle basi(buona parte, non dico tutte ma siamo lì; ciò che mi è servito per programmare ciò che ho programmato lo ho imparato, per buona parte, dagli errori che ho fatto, però devo ammettere che sanno spiegare meglio di tutta la schifosa documentazione che gira su internet sulla programmazione, mi stò riferendo a quella sù librerie specifiche) per passare ad allegro.h(liberia per la gestione multimediale, orientata sui videogiochi 2D), che per fortuna ho imparato bene, ma sento sempre più il bisogno di dover farmi quelle basi e forse rifare anche alcune che so già e che magari ho dimenticato.

Volevo un consiglio su un manuale o qualunque cosa che riesca a farmi fare le basi della programmazione C/C++(tenendo conto che non sono uno che stà iniziando ora, ma che qualcosa so già).

Lo chiedo perchè voglio essere sicuro, stavolta, di studiare su buon materiale che mi porti a sapere bene le basi, non sul primo manuale che trovo su ebay insomma; proprio per questo lo sto chiedendo quà.
Per sintetizzare volevo evitare di ricominciare da capo con la programmazione ed evitare di aver perso tempo, studiando su un buon manuale che riesca a mettermi sù quelle basi che mi mancano(per sapere quale manuale chiedo a voi)

Con manuale comunque non intendo perforza cartaceo, mi vanno bene anche buone guide, basta che però siano buone.

Qualcuno può consigliarmi qualcosa?

Grazie in anticipo per le risposte


Guarda, mi sono posto la stessa domanda non meno qualche settimana fa, perché come te voglio imparare i suddetti linguaggi, io ti consiglierei di "acquistare":
C [1988] C Programming Language (2nd Edition) (http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628/ref=sr_1_1?ie=UTF8&qid=1372867307&sr=8-1&keywords=c+programming) Brian W. Kernighan, Dennis M. Ritchie
in alternativa [2004]C Primer Plus (5th Edition) (http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_4?s=books&ie=UTF8&qid=1372867616&sr=1-4&keywords=c) Stephen Prata

C++ [2013] The C++ Programming Language, 4th Edition (http://www.amazon.com/C-Programming-Language-4th/dp/0321563840/ref=sr_1_1_title_1_pap?s=books&ie=UTF8&qid=1372867749&sr=1-1&keywords=C%2B%2B) Bjarne Stroustrup
in alternativa [2011] C++ Primer Plus (6th Edition) (Developer's Library) (http://www.amazon.com/Primer-Plus-6th-Developers-Library/dp/0321776402/ref=sr_1_2?s=books&ie=UTF8&qid=1372867749&sr=1-2&keywords=C%2B%2B) Stephen Prata

Lo so sono in inglese ma si capiscono molto meglio di molti in italiano :P

pio10021
03-07-2013, 22:19
Che idiota mi sono scordato di dire la cosa più importante >.<: possibilmente in italiano.

Spiego, non è che io non abbia voglia di imparare l'inglese ma è che lo sto studiando da quest'anno sul serio e prima di finire vorrei imparare qualcosa(non sono maggiorenne), le basi possibilmente vorrei farmele con libri in italiano.

Ok so che i libri sono tradotti male, in realtà so anche che qualunque cosa in programmazione è scritta da cani ma lasciamo perdere. Forse la difficoltà maggiore di un programmatore è trovare documentazione, guardate scrivo per grafici "Guida photoshop cs6" sapete quante cose mi escono fuori? Ora se scrivo "guide to x"(sì in inglese, perchè in italiano la situazione veramente fà piangere, in inglese poco ci manca) dove x è una libreria esce fuori al massimo la documentazione ufficiale xDDD Sapete cos'è la "documentazione ufficiale" no ? Degli esempi , ma dico ma chi le fà le librerie? Un programmatore professionista può essere tanto bravo e poi spiegare con degli esempi che è già tanto se sono commentati ...... Poi mi chiedo, ma quelli che creano le librerie lo linguaggi web li sanno, perchè se li sanno perchè i loro siti sembrano buttati giù da un bambino in mezz'ora ._.

Scusate questa piccola parentesi, è che ogni tanto invidio le altre professioni(ciò che studio mi piace, ci che non mi piacciono affatto sono gli esperti del settore; ho detto esperti non a caso). Ho messo la parentesi su spoiler per non disturbare eventuali lettori.

Comunque tornando al discorso principale preferireid avvero in italiano, in caso estremo posso sforzarmi ma rischio invece che imparare di disimparare. I libri che mi avete postato sembrano ottimi(ho trovato buoni commenti su "c++ primer" ad esempio) e vi ringrazio, ma non conosciete qualcosa in italiano? Poi in futuro appena saprò l'inglese state sicuri che nel web userò solo quello per questa materia, già la "documentazione" in inglese sulle librerie fà piangere figuriamoci quella in italiano(che per cronoca, non esiste).

Ad esempio parlando di guide online le guide di html.it, cosa ne pensate? Potrebbero fare al caso mio?

Ripeto, se non c'è soluzione compro un libro in inglese ma sarebbe FORTEMENTE meglio di no. Queste sono basi, stavolta le voglio fare per bene(e capirle, con l'inglese sarebbe molto molto complicato per me, per ora).

PS: Non voglio scatenare una lunga discussione ot per quel messaggio scritto in spoiler, però sarei favorevole a postarvi qualche screenshot di ricerche google e "documentazioni ufficiali" :D . Forse sono io che da anni mi piace insegnare, quando insegno, come dio comanda e se posto in un forum mi accerto che tutti possano capire, forse è il mio concetto di "una mano lava l'altra" che è totalmente sbagliato. Comunque mi piacerebbe ricevere una risposta sul perchè di questa scarsa documentazione, specialmente sulle librerie. Mi cchiedo se è per menefreghismo degli altri, incapacità di spiegare o altro. Personalmente se produco un programma, un prodotto penso prima di tutto che gli altri siano capaci di usarlo, non metto su un sito con due righe di html di cui la maggiorparte sono link e due esempi scritti al volo. [e quà mi riferisco alle librerie!] Voglio precisare che non mi stò riferendo al supporto ricevuto da forum o altro, che apparte per certe esperienze lo ho sempre ricevuto in modo ottimo(e così lo ho dato io, per quel che potevo, su altri forum)

Grazie per le risposte e per i futuri consigli

nico159
03-07-2013, 23:20
In italiano trovi
C++. Linguaggio, libreria standard, principi di programmazione
http://www.ibs.it/code/9788871920788/stroustrup-bjarne/c-linguaggio-libreria-standard.html

Ovvero l'edizione precedente di The C++ Programming Language, 4th Edition

Attenzione però: la 4° edizione non è solo un rifinimento della precedente, ma parla di C++ usando la sua ultima revisione C++11 - che migliora non di poco il linguaggio e le maniere di approcciarsi ad alcuni problemi

A te la scelta

(r3((h3r
04-07-2013, 12:48
Guarda, come ti ho detto nel precedente reply mi sono posto queste domande prima di te e ti posso dire chiaro e tondo che i libri in inglese sono molto meglio dei libri italiani e degli stessi libri inglesi tradotti in italiano, sono più completi, sono scritti bene e l'inglese non è poi così difficile da capire, te lo dice uno che è al livello liceale come inglese e poi anche perché le traduzioni che spesso fanno non rendono bene l'idea. Me lo hanno detto tutti, anche gli amici che frequentano informatica nelle università, quindi è una cosa sulla quale sono abbastanza sicuro e poi ho fatto delle ricerche e ho trovato che in effetti è così.
Ma se te la posso dire tutta, (non voglio in alcun modo inneggiare alla pirateria) i libri in inglese si trovano in rete e senza pagare un centesimo ti studi di tutto e di più, poi sei libero di fare quello che vuoi per carità, nessuno ti vuole obbligare a fare nulla...

Cmq se sei ancora convinto di volere libri italiani allora, ho chiesto un po' in giro e mi hanno detto questi:

[2004] Il linguaggio C. Principi di programmazione e manuale di riferimento (http://www.amazon.it/linguaggio-Principi-programmazione-manuale-riferimento/dp/887192200X/ref=sr_1_2?s=books&ie=UTF8&qid=1372934059&sr=1-2&keywords=c) Brian W. Kernighan, Dennis M. Ritchie
Sarebbe la traduzione italiana di quello che ti ho scritto sopra, ovvero il miglior libro C di tutta la storia (visto anche che lo hanno scritto gli inventori) anche se la traduzione, ho sentito dire che non è fatta benissimo...

In alternativa ti consiglio questo:
[2013] Linguaggio C 5/ed (http://www.catalogo.mcgraw-hill.it/catLibro.asp?item_id=2908) è appena uscito e quindi è aggiornatissimo al nuovo standard C11 uscito un paio di anni fa mi sembra...

Per C++ ti consiglio assolutamente questo:
[2000] C++. Linguaggio, libreria standard, principi di programmazione (http://www.amazon.it/Linguaggio-libreria-standard-principi-programmazione/dp/8871920783/ref=sr_1_2?ie=UTF8&qid=1372934747&sr=8-2&keywords=Bjarne+Stroustrup) Bjarne Stroustrup
È la traduzione italiana della 3° edizione del libro del suo inventore, ma come scritto da "nico159", la 4° edizione è appena uscita in inglese, è aggiornata anche lei al nuovo standard C++11, in italiano la troveremo tra 1 anno o forse più...

pio10021
04-07-2013, 17:43
stai facendo un calderone pazzesco. paragonare delle guide su internet a dei libri di livello professionale è come paragonare dei cheat sheet con l'enciclopedia treccani.

Sì ho fatto un po' di confusione, ma mi riferivo principalmente a guide sulle basi e sulle librerie(il primo caso è ACCETTABILE, e sto esagerando che la situazione è peggio; il secondo fa piangere), poi va beh per i libri chiunque a quello "spirito di aiutare gli altri" per i soldi.
Poi questa situazione che gli italiani devono leggere perforza(per capire bene) libri in inglese per le basi è normale? Scherziamo? Come dire che per imparare le addizioni devi comprarti un libro in ingleseo. L'inglese sarà la lingua globale, ma le scuole italiane sono sempre scuole italiate, in 5 minuti sul pc imparo più inglese che in 2 lezioni a scuola).
Tralasciamo un attimo le guide su internet, ok i programmatori sono dei gran ..... e giustamente insegnano solo per soldi, ci può stare; il mondo è così.
Ma porca miseria uno che crea una libreria ci vuole allegare anche qualche diamine di guida, oppure uno deve andare a intuito per capire il suo lavoro;
Se avessero creato un software con la cura che mettono sulle librerie voglio vedere se qualcuno lo scaricava.
A gente del genere non donerei MAI nemmeno un centesimo, a costo di non aver librerie e cambiare settore di studio(il grafico mi comincia a piacere, c'è molta molta più documentazione :D).


Rispondo a nico e (r3((h3r insieme poichè più o meno i concetti sono gli stessi:

Voglio prima di tutto chiarire che io vorrei leggere dei libri in inglese(come detto le basi me le voglio fare per bene, figuriamoci se mi dò la zappa sui piedi comprando materiale di "scarsa qualità"), ma sò benissimo che il mio inglese non è ottimo(quest'estate voglio fare il passato e futuro da me, per chiarirci. Ho cominciato a cercare di studiare seriamente l'inglese da quest'anno, affiancandomi alle lezioni di 1 superiore, e dà quà capite tutto. Ora che è estate spero di farlo un po' da me) e temo di disimparare.

Il materiale gratuito in questo caso potrebbe essere una soluzione sicura, forse, perchè mi permetterebe in caso non capissi di comprarmi un manuale in italiano senza però aver buttato soldi.
Quando (r3((h3r intende che si trova gratuito su internet intende guide o pirateria? Non voglio che mi inciti, ma voglio sapere cosa intendi(e se intendi guide se puoi linkarmi qualcosa sarebbe l'ideale)?

Al limite potrei dare una bella spolverata alle basi ora con libri italiani e poi in futuro ci ripasso con un "approffondimento" in inglese, in quel futuro saprò l'inglese. Del resto tra tenermi aggiornando studiando le ultime novità ora oppure fare un "approffondimento" sugli ultimi standard in futuro non credo ci sia tanta differenza.
Ancora sto cercando di capire quando facciano schifo questi libri in italiano, cioè riesco a imparare le basi con quelle(se poi voglio fare un approfondimento professionale vedrò di farlo in futuro) oppure perdo tempo?
Del resto queste traduzione non possono essere venute tanto male, ma cosa usano google traduttore?

Per ora la mia idea è linguaggio c 5 ed. per il C e C++ linguaggio, libreria standard e principi della programmazione per il C++, ovviamente in italiano; oppure sarei per delle guide, potrei provarle in inglese se sono gratuite, se non capisco compro i manuali in italiano(non ho buttato soldi e nemmeno molto tempo, poichè se non capisco me ne accorgo subito).

Comunque vorrei un attimo riaprire la parentesi su html.it, che ne pensate di quelle guide? A me sembrano ben organizzate(ad essere sincerto spiegano un po' male, ma credo perchè le ho lette non seguendo l'ordine degli argomenti e quindi il filo logico; però conoscendo html.it sono un po' contrario a leggere le sue guide e non mi fido tanto di farmi fare le basi da loro), ma vorrei qualche consiglio da qualcuno più esperto prima di prendere l'iniziativa.

Mi è venuto un dubbio, io pensavo di studiare un manuale in C e poi uno in C++ , per capire bene la differenza tra i due linguaggi(il C++ è orientato alla programmazione agli oggetti usando, ad esempio, le classi; o almeno credo) e per rendermi la comprensione del C++ più semplice(fin'ora le basi che ho le ho principalmente in C), per poi usare solo il C++. Perchè pensavo che il C era ormai "abbandonato" a favore del C++, e infatti leggevo il C solo per capire bene le differenze tra i due linguaggi e per capire meglio quest'ultimo. Tuttavia se continuano ad aggiornare anche il C vuol dire che sono due linguaggi un po' differenti, e che facendo in questo modo io in pratica mi studio teorie diverse? Se fosse così sarebbe inutile comprare due manuali e ne comprarei solo uno per il linguaggio migliore, per le guide vale lo stesso discorso ovviamente.
Sarebbe come usare due penne per fare una firma, tanto vale usarne una(e risparmiare il tempo in cui uso quell'altra per fare un'altra firma, ovvero per imparare un'altro linguaggio tipo il java, quest'ultimo lo vedo un po' più per le app e quindi un po' più per il futuro; non vorrei ora aver scatenato una guerra per dire se questo futuro è giusto o no in questo modo).


Scusate se ho fatto un poema e se sto tirando la discussione per le lunghe.


Secondo voi cosa dovrei fare, compro i libri in italiano, leggo le guide di html.it, leggo le guide in inglese, compro libri in inglese ecc... o cosa? Tenendo conto delle ultime cosa che ho detto sul mio inglese

Apparte tutto queste discorso grazie per le risposte, non pensavo di ricevere così tanti consigli(anche se in verità i forum si riconoscono subito se sono forum o se sono pagine per ospitare pubblicità).

PS: Se dà fastidio ciò che scrivo negli spoiler smetto, non voglio mettermi a litigare o cose simile per quella roba che ho scritto poichè non è per quello che ho aperto il topic(mi piacerebbe discuterne, ma non voglio cambiare discorso; al massimo aprirò un topic in off-topic un giorno o l'altro).

Pio

nico159
04-07-2013, 18:22
Comunque vorrei un attimo riaprire la parentesi su html.it, che ne pensate di quelle guide? A me sembrano ben organizzate(ad essere sincerto spiegano un po' male, ma credo perchè le ho lette non seguendo l'ordine degli argomenti e quindi il filo logico; però conoscendo html.it sono un po' contrario a leggere le sue guide e non mi fido tanto di farmi fare le basi da loro), ma vorrei qualche consiglio da qualcuno più esperto prima di prendere l'iniziativa.
Ho dato uno sguardo veloce ad html.it e posso dirti questo

Evita assolutamente

Posso paragonare quel corso ai programmi che fanno su Discovery: paiono carini, ti fanno credere di aver imparato qualcosa, ma nella realtà hai appena una visione superficiale della materia - impossibile da impiegare in qualche modo tranne che con gli amici, e sui forum

C++ è notoriamente un linguaggio complesso, e va fatto con serità se non si vuole finire male

(r3((h3r
04-07-2013, 19:22
Quando (r3((h3r intende che si trova gratuito su internet intende guide o pirateria? Non voglio che mi inciti, ma voglio sapere cosa intendi(e se intendi guide se puoi linkarmi qualcosa sarebbe l'ideale)?
Pio

Intendo dire... che oggi come oggi con internet si sono raggiunti livelli astrali e praticamente ci si può trovare qualsiasi cosa sopra, sia come "Guide" sia come interi e propri "Libri" (chi ha orecchie per intendere intenda), perciò basta che cerchi e trovi tutto, e anche che fossero in inglese ci sono degli ottimi traduttori in rete che grosso modo ti danno un'idea del discorso senza che non sai un acca di inglese, dunque il mio consiglio è: se proprio hai bisogno di un libro cartaceo perché vuoi studiare anche quando non sei davanti al pc e lo vuoi in italiano perché così lo capisci meglio, allora comprati quelli che ti ho scritto sopra, altrimenti fai delle ricerche come ho fatto io e "cerchi di trovare quello che ti serve" e poi te lo traduci.

Per quanto riguarda l'HTML & CCS non c'è sito migliore di questo per imparare http://www.w3schools.com/ tutto gratuito, lo so è in inglese (ma tu prima o poi dovrai studiarlo perché è alla base di tutto se vuoi diventare un ottimo programmatore) ma basta che fai: tasto destro su chrome "traduci in italiano" ed il gioco è fatto. :)

pio10021
05-07-2013, 00:58
Evita assolutamente

Posso paragonare quel corso ai programmi che fanno su Discovery: paiono carini, ti fanno credere di aver imparato qualcosa, ma nella realtà hai appena una visione superficiale della materia - impossibile da impiegare in qualche modo tranne che con gli amici, e sui forum

C++ è notoriamente un linguaggio complesso, e va fatto con serità se non si vuole finire male

Si infastti html non mi è mai piaciuto, in primis per la gente che posta sul forum; quello lì lo considero pagine per ospitare pubblicità, anche invasiva! [video del cavolo che si aprono ogni santa volta dopo un po', a volte la musica mi ha fatto prendere dei colpi e ci ho messo 1-2 minuti per capire che cavolo era xD). Delle guide ne ho sentito parlare bene, ma volevo assicurarmi che fossero buone; come mi aspettavo, non lo sono.

"C++ è notoriamente un linguaggio complesso, e va fatto con serità se non si vuole finire male "
Ed è per questo che sto postando quì.

Intendo dire... che oggi come oggi con internet si sono raggiunti livelli astrali e praticamente ci si può trovare qualsiasi cosa sopra, sia come "Guide" sia come interi e propri "Libri" (chi ha orecchie per intendere intenda), perciò basta che cerchi e trovi tutto, e anche che fossero in inglese ci sono degli ottimi traduttori in rete che grosso modo ti danno un'idea del discorso senza che non sai un acca di inglese, dunque il mio consiglio è: se proprio hai bisogno di un libro cartaceo perché vuoi studiare anche quando non sei davanti al pc e lo vuoi in italiano perché così lo capisci meglio, allora comprati quelli che ti ho scritto sopra, altrimenti fai delle ricerche come ho fatto io e "cerchi di trovare quello che ti serve" e poi te lo traduci.

Per quanto riguarda l'HTML & CCS non c'è sito migliore di questo per imparare http://www.w3schools.com/ tutto gratuito, lo so è in inglese (ma tu prima o poi dovrai studiarlo perché è alla base di tutto se vuoi diventare un ottimo programmatore) ma basta che fai: tasto destro su chrome "traduci in italiano" ed il gioco è fatto.

Sì conosco la potenza degli attuali traduttori, ci si scherza un po' sopra ma google traduttore ha raggiunto dei livelli incredibili, superiori ai molti traduttori a pagamento! (se facessero un cavolo di software per pc da traduzione diamine glie lo prenderei subito >.<).-

Tornando al discorso non è per studiare quando non sono al pc, questo non è sicuramente il problema[mi downloddo le pagine al massimo se ho problemi con la rete], ma più mche altro per la lingua; ma come già detto in caso estremo cambio, non ho buttato soldi ne tempo(perchè me ne accorgo subito).
L'unica cosa che mi ferma è il fatto che è vero che su internet si trovano guide e anche libri(e-book principalmente), ma non contengono proprio tutte le basi e messe in ordine come si trovano in un libro, che dovrebbe seguire anche il suo filo logico.

Perciò credo che farò in questo modo:
Domani(ora vado a letto) darò una bella occhiata alla situazione del materiale su web, poi in caso compro le guide in italiano; in futuro farò un eventuale approfondimento con guide in inglese. Provabile che associ i libri cartacei ai manuale online, stavolta le basi le voglio fare perbene e butterei anche quei 30€ su un manuale.

Riguardo a html e CSS l'html pensavo di associarlo subito con il C++ tra un po', e poi ero indeciso se fare il PHP per il discorso dei forum.

Approfitto per fare qualche domandina visto che hoi trovato qualcuno che su i miei dubbi c'è già passato a quanto pare:
- Il php mi conviene studiarlo? Il java? Il ruby? [avrei una lista, ma ciò che pensavo fin'ora era come "offline" C++ e java e come "web" html, php e javascript, ma forse sarebbe meglio riddure la lista se c'è qualcosa di "inutile"]
- sulle librerie ci fanno i manuali, anche in inglese? Tu ad esempio se devi imparare a usare una libreria come cavolo fai? E dopo le basi, solitamente a cosa si passa? (io pensavo di avventurarmi su qualche libreria che non ho capito per le basi e poi vedere, provabilmente avrei chiesto di nuovo a qualche esperto/amico, forse sempre in questo forum)
- [sì lo so, questa è idiota] Ho sempre fatto acquisti su ebay e su amazon(principalmente per l'elettronica), ibs com'è per i libri? E' un amazon letterario? E "libraccio"(che sembra essere la stessa cosa di ibs, però per i libri usati).

Perdonate le domande un po' OT, ma invece che intasare il forum con un'altro topic preferisco continuare quì, le domande più o meno girano sempre attorno al discorso(escludendo l'ultima xD).
Comunque i dubbi che avevo principalmente li ho chiariti, e so anche in caso che libri comprare, grazie davvero.

Grazie per le risposte e per le future,

Pio

pio10021
05-07-2013, 19:22
Volevo aggiungere una cosa sull'ultimo post:
Mi è venuto un dubbio, io pensavo di studiare un manuale in C e poi uno in C++ , per capire bene la differenza tra i due linguaggi(il C++ è orientato alla programmazione agli oggetti usando, ad esempio, le classi; o almeno credo) e per rendermi la comprensione del C++ più semplice(fin'ora le basi che ho le ho principalmente in C), per poi usare solo il C++. Perchè pensavo che il C era ormai "abbandonato" a favore del C++, e infatti leggevo il C solo per capire bene le differenze tra i due linguaggi e per capire meglio quest'ultimo. Tuttavia se continuano ad aggiornare anche il C vuol dire che sono due linguaggi un po' differenti, e che facendo in questo modo io in pratica mi studio teorie diverse? Se fosse così sarebbe inutile comprare due manuali e ne comprarei solo uno per il linguaggio migliore, per le guide vale lo stesso discorso ovviamente.
Sarebbe come usare due penne per fare una firma, tanto vale usarne una(e risparmiare il tempo in cui uso quell'altra per fare un'altra firma, ovvero per imparare un'altro linguaggio tipo il java, quest'ultimo lo vedo un po' più per le app e quindi un po' più per il futuro; non vorrei ora aver scatenato una guerra per dire se questo futuro è giusto o no in questo modo).

Riguardo a questo faccio bene a studiare il C per capire la differenza tra i due linguaggi e facilitarmi l'apprendimento del C++? Quindi ho ragione nel pensare che ormai il C è un fondamento del C++ e quindi alla fine conviene studiare prima il fondamento e poi ciò che c'è sopra?


Comunque sto leggendo C Programmin language(la 2 edizione), lo sto capendo abbastanza bene! Però ho sempre problemi con la compilazione del sorgente, i sorgenti che postano lì non funzionano .-., per evitare di andare ot ho inviato un mp a (r3((h3r.
Quindi penso che forse potrei usare i libri in inglese, ma sinceramente se penso che il libro del C++ ha 1000 pagine e passa in inglese forse è meglio se mi compro quella italiana, che almeno leggo un po' più veloce.
Voi che dite, se capisco il libro sul C capirei anche The C++ programming language(4 edizione)?

E un'ultima cosa, riguardo al libro su C mi è venuto un dubbio se prendere C Programming language, C Primer Plus o quello in italiano; il primo sarà il libro migliore della storia ma è un po' vecchiotto, il secondo quindi forse è meglio; o forse è ancora meglio il terzo nonostante sia in italiano perchè è aggiornato al C11? Quale mi farebbe capire meglio? (se poi alla fine non studio il C11 pazienza, tanto userò principalmente il C++, se mi confermate ciò che ho scritto nel dubbio sopra).
Per il libro in italiano mi riferisco a "Linguaggio C(5 ed.)".

nico159
05-07-2013, 21:13
Riguardo a questo faccio bene a studiare il C per capire la differenza tra i due linguaggi e facilitarmi l'apprendimento del C++? Quindi ho ragione nel pensare che ormai il C è un fondamento del C++ e quindi alla fine conviene studiare prima il fondamento e poi ciò che c'è sopra?
Assolutamente no
C++ va usato come C++ e non come C

Impara C++ e la via del C++ che è ben altra cosa dal C style :cool:

Voi che dite, se capisco il libro sul C capirei anche The C++ programming language(4 edizione)?
Dovresti

pio10021
06-07-2013, 00:03
Assolutamente no
C++ va usato come C++ e non come C

Impara C++ e la via del C++ che è ben altra cosa dal C style :cool:


Dovresti

Forse hai frainteso, ma almeno dal tuo commento capisco che il C è un po' inusato e abbandonato a favore del C++; però io intendevo se facevo bene a studiarmi il C per POI studiarmi il C++, in tal modo capirei perfettamente le differenze tra i due linguaggi(senza quindi far confusione tra C e C++), saprei in caso magari anche quale adottare per svariati casi(forse non si può usare sempre il C++) e mi renderei la comprensione del C++ più semplice. Tuttavia a questa idea che ho ora mi si interpone un dubbio: conviene studiare direttamente e solo C++?

Questo era il dubbio, che poi il C++ è meglio lo immaginavo dal semplice altro nome che è "C con classi" :D

Grazie della risposta, non è che puoi rispondermi anche al dubbio sui libri C(l'ultima domanda postata), sempre che ovviamente non debba studiare solo il C++ e alle altre che ho postato? (quel post che hai quotato è il continuo del post precedente, invece che fare un edit dato che volevo uppare ho fatto entrambe le cose con un post, rendendo le cose più ordinate).
Tra l'altro non vedo l'ora di imparare le basi del C++, ho sempre fatto sorgenti un po' lunghi e per me è dura capirli dopo un po' di tempo, l'idea di programmare con le classi mi piace davvero(ho visto qualche esempio, i miei sorgenti sarebbero migliori con le classi! Del resto sui videogiochi usare la programmazione ad oggetti viene spontanea poichè è spontaneo ragionare a "oggetti", scusate il gioco di parole :stordita: ).

Riguardo al discorso libri in inglese o italiano per il momento sarei per studiarmeli in inglese. Ma ciò che mi ferma è che ho avuto problemi con quel libro in C(alcuni sorgenti sono fatti male, le ho anche copiati e incollati ma intanto danno problemi e ho un'altrpo problemi sugli array), li ho invati a r3((h3r e aspetto risposte anche per decidere(non so se ho fatto bene a inviare una cosa del genere con un mp, da un lato non volevo finire ot e sembrare uno che si approfitta delle risposte ma dall'altro i miei problemi sono utili a tutti e tanto vale metterli sul forum; però non ho molta confidenza con questo forum e preferisco non andare troppo ot, non vvorrei sembrare uno che si approfitta dato che sono tutto l'incontrario sui forum ;) ).
Poi ho sempre la preuccupazione delle 1000 pagine di C++, non mi spaventa la lunghezza, ma la lingua! Se cavolo non capissi mettiamo all'800centesima pagina, dovrei comprarmi un manuale in italiano dopo averl letto 800 pagine(anche se potrei saltare gli argomenti con un'altro manuale magari non seguono lo stesso percorso).

Grazie per la risposte e per le future,

Pio

vendettaaaaa
06-07-2013, 01:43
Forse hai frainteso, ma almeno dal tuo commento capisco che il C è un po' inusato e abbandonato a favore del C++; però io intendevo se facevo bene a studiarmi il C per POI studiarmi il C++, in tal modo capirei perfettamente le differenze tra i due linguaggi(senza quindi far confusione tra C e C++), saprei in caso magari anche quale adottare per svariati casi(forse non si può usare sempre il C++) e mi renderei la comprensione del C++ più semplice. Tuttavia a questa idea che ho ora mi si interpone un dubbio: conviene studiare direttamente e solo C++?

Questo era il dubbio, che poi il C++ è meglio lo immaginavo dal semplice altro nome che è "C con classi" :D

Grazie della risposta, non è che puoi rispondermi anche al dubbio sui libri C(l'ultima domanda postata), sempre che ovviamente non debba studiare solo il C++ e alle altre che ho postato? (quel post che hai quotato è il continuo del post precedente, invece che fare un edit dato che volevo uppare ho fatto entrambe le cose con un post, rendendo le cose più ordinate).
Tra l'altro non vedo l'ora di imparare le basi del C++, ho sempre fatto sorgenti un po' lunghi e per me è dura capirli dopo un po' di tempo, l'idea di programmare con le classi mi piace davvero(ho visto qualche esempio, i miei sorgenti sarebbero migliori con le classi! Del resto sui videogiochi usare la programmazione ad oggetti viene spontanea poichè è spontaneo ragionare a "oggetti", scusate il gioco di parole :stordita: ).

Riguardo al discorso libri in inglese o italiano per il momento sarei per studiarmeli in inglese. Ma ciò che mi ferma è che ho avuto problemi con quel libro in C(alcuni sorgenti sono fatti male, le ho anche copiati e incollati ma intanto danno problemi e ho un'altrpo problemi sugli array), li ho invati a r3((h3r e aspetto risposte anche per decidere(non so se ho fatto bene a inviare una cosa del genere con un mp, da un lato non volevo finire ot e sembrare uno che si approfitta delle risposte ma dall'altro i miei problemi sono utili a tutti e tanto vale metterli sul forum; però non ho molta confidenza con questo forum e preferisco non andare troppo ot, non vvorrei sembrare uno che si approfitta dato che sono tutto l'incontrario sui forum ;) ).
Poi ho sempre la preuccupazione delle 1000 pagine di C++, non mi spaventa la lunghezza, ma la lingua! Se cavolo non capissi mettiamo all'800centesima pagina, dovrei comprarmi un manuale in italiano dopo averl letto 800 pagine(anche se potrei saltare gli argomenti con un'altro manuale magari non seguono lo stesso percorso).

Grazie per la risposte e per le future,

Pio
Mio consiglio: lascia perdere il C e parti di C++, per vari motivi: il C++ è meglio, cioè, il C è quasi un sottoinsieme del C++, e puoi scrivere in C usando un compilatore C++. Una volta che conosci la sintassi del C++, puoi fare tutto anche in C, sapendo alcune piccole differenze. Certo, sarà più difficile in quanto ti sarai abituato alle comodità del C++, e tornare alle funzioni rudimentali della C standard library sarà un "pain in the ass"...
Quello che cambia è lo stile di programmazione. Perchè è meglio? Più tipizzato, quindi sbagliare è molto più difficile; ha un'enormità di astrazioni in più che semplificano la vita (non solo le classi: anzi, la vera forza del C++ sta nei template); col C++ ci fai di tutto, comprese le interfacce grafiche con Qt (e altri framework non più degni di nota), con C molte meno cose; è più diffuso e documentato, ed infine è più più!

The_ouroboros
06-07-2013, 10:34
Mio consiglio: lascia perdere il C e parti di C++, per vari motivi: il C++ è meglio, cioè, il C è quasi un sottoinsieme del C++, e puoi scrivere in C usando un compilatore C++. Una volta che conosci la sintassi del C++, puoi fare tutto anche in C, sapendo alcune piccole differenze. Certo, sarà più difficile in quanto ti sarai abituato alle comodità del C++, e tornare alle funzioni rudimentali della C standard library sarà un "pain in the ass"...
Quello che cambia è lo stile di programmazione. Perchè è meglio? Più tipizzato, quindi sbagliare è molto più difficile; ha un'enormità di astrazioni in più che semplificano la vita (non solo le classi: anzi, la vera forza del C++ sta nei template); col C++ ci fai di tutto, comprese le interfacce grafiche con Qt (e altri framework non più degni di nota), con C molte meno cose; è più diffuso e documentato, ed infine è più più!

Opinioni opinabili :stordita:

nico159
06-07-2013, 10:43
Forse hai frainteso, ma almeno dal tuo commento capisco che il C è un po' inusato e abbandonato a favore del C++; però io intendevo se facevo bene a studiarmi il C per POI studiarmi il C++, in tal modo capirei perfettamente le differenze tra i due linguaggi(senza quindi far confusione tra C e C++), saprei in caso magari anche quale adottare per svariati casi(forse non si può usare sempre il C++) e mi renderei la comprensione del C++ più semplice. Tuttavia a questa idea che ho ora mi si interpone un dubbio: conviene studiare direttamente e solo C++?

Questo era il dubbio, che poi il C++ è meglio lo immaginavo dal semplice altro nome che è "C con classi" :D

Grazie della risposta, non è che puoi rispondermi anche al dubbio sui libri C(l'ultima domanda postata), sempre che ovviamente non debba studiare solo il C++ e alle altre che ho postato? (quel post che hai quotato è il continuo del post precedente, invece che fare un edit dato che volevo uppare ho fatto entrambe le cose con un post, rendendo le cose più ordinate).
Tra l'altro non vedo l'ora di imparare le basi del C++, ho sempre fatto sorgenti un po' lunghi e per me è dura capirli dopo un po' di tempo, l'idea di programmare con le classi mi piace davvero(ho visto qualche esempio, i miei sorgenti sarebbero migliori con le classi! Del resto sui videogiochi usare la programmazione ad oggetti viene spontanea poichè è spontaneo ragionare a "oggetti", scusate il gioco di parole :stordita: ).

Riguardo al discorso libri in inglese o italiano per il momento sarei per studiarmeli in inglese. Ma ciò che mi ferma è che ho avuto problemi con quel libro in C(alcuni sorgenti sono fatti male, le ho anche copiati e incollati ma intanto danno problemi e ho un'altrpo problemi sugli array), li ho invati a r3((h3r e aspetto risposte anche per decidere(non so se ho fatto bene a inviare una cosa del genere con un mp, da un lato non volevo finire ot e sembrare uno che si approfitta delle risposte ma dall'altro i miei problemi sono utili a tutti e tanto vale metterli sul forum; però non ho molta confidenza con questo forum e preferisco non andare troppo ot, non vvorrei sembrare uno che si approfitta dato che sono tutto l'incontrario sui forum ;) ).
Poi ho sempre la preuccupazione delle 1000 pagine di C++, non mi spaventa la lunghezza, ma la lingua! Se cavolo non capissi mettiamo all'800centesima pagina, dovrei comprarmi un manuale in italiano dopo averl letto 800 pagine(anche se potrei saltare gli argomenti con un'altro manuale magari non seguono lo stesso percorso).

Grazie per la risposte e per le future,

Pio
Non è così, C è ancora molto utilizzato con tantissimi ottimi sviluppatori che non userebbero mai C++ (i due messaggi qua sopra, ne sono la prova)
Ad oggi puoi trovare bellissime librerie, moderne, scritte in C
Server ad alte performance scritti in C e così via (anche se alcuni, stanno valutando l'idea di inserire del C++ nel codice)

E' solo MS che crede che C sia morto, tutti gli altri sono di una idea diversa :)

Se parti studiando C++ da un libro di C, imparerai non solo le parti in comune ma anche lo stile di programmazione del C - appunto come dice vendettaaaaa i due linguaggi portano a scrivere codice in maniera nettamente differente

Non è un male, finchè non pretenderai di usare C++ come si fa con C

Se il tuo discorso è: "che studio prima C o C++?"
Secondo me C++ ha il vantaggio principale di poter scrivere codice astratto a costo quasi zero (come performance e codice da scrivere rispetto C)
Ne deriva che una volta investito tempo nell'impararlo che come avrai notato, è un tantino più del C, ti troverai a poter scrivere sw complessi in meno tempo, con codice IMHO migliore

Per i libri su C non so proprio dirti, ho studiato C solo per l'uni quindi mai fatto grandi cose
http://fabiensanglard.net/c/ è stato il mio riferimento, ma non sono mai andato oltre "C Programming Language" dato che ho preferito investire il mio tempo nello studiare C++ :D

vendettaaaaa
06-07-2013, 12:06
Opinioni opinabili :stordita:
Non sono sicuramente esperto come voi, ma di opinabile ci sono solo due considerazioni: che scrivere col C dopo aver imparato lo stile C++ è una tortura (se ti piacciono le situazioni disperate sicuramente sarebbe meraviglioso :D ) e che col C ci fai molte meno cose. Il resto son fatti. A meno che tu non abbia da ridire sul fatto che le astrazioni del C++ (ma proprio in generale) semplificano la vita...:eek:

The_ouroboros
06-07-2013, 12:16
Non sono sicuramente esperto come voi, ma di opinabile ci sono solo due considerazioni: che scrivere col C dopo aver imparato lo stile C++ è una tortura (se ti piacciono le situazioni disperate sicuramente sarebbe meraviglioso :D ) e che col C ci fai molte meno cose. Il resto son fatti. A meno che tu non abbia da ridire sul fatto che le astrazioni del C++ (ma proprio in generale) semplificano la vita...:eek:

In realtà con il C fai tutto solo in modo diverso.
E l' astrazione la si paga sempre.
Detto ciò sono anche due target diversi.
Si può "programmare a oggetti" anche in C.. ma non è quello il suo uso.
Come si può scrivere kernel real-time in C++ ma non è quello il suo uso e cmq non offre le stesse prestazioni che lì servono.

Just my 2 cents

nico159
06-07-2013, 13:05
In realtà con il C fai tutto solo in modo diverso.
E l' astrazione la si paga sempre.
Detto ciò sono anche due target diversi.
Si può "programmare a oggetti" anche in C.. ma non è quello il suo uso.
Come si può scrivere kernel real-time in C++ ma non è quello il suo uso e cmq non offre le stesse prestazioni che lì servono.

Just my 2 cents
http://www.artima.com/shop/effective_cpp_in_an_embedded_environment non sono tutti d'accordo con il tuo parere

In C++ c'è una regola: "non paghi quello che non usi"

Comunque io riporto solo materiale che parla con dati alla mano, cosa è possibile e cosa no

Sono un semplice studente :)

E' inutile iniziare una flamewar C vs C++ qua

vendettaaaaa
06-07-2013, 14:27
Anch'io sono un semplice studente, anzi anche meno, riporto solo le parole di Stroustrup e altri membri dell'ISO, persone che mi sembrano alquanto rispettabili. Qualcuno potrebbe obiettare che "sono di parte", ma basta guardare qualcuno dei loro discorsi pubblici (come quelli del GoingNative 2012, su YouTube) per capire che non sono lì a vendere un loro prodotto, quel che dicono, lo dicono perchè sono genuinamente interessati a divulgare uno stile di programmazione più moderno, sicuro, robusto e performante.
Quindi, se Stroustrup mi dice che il C è "quasi un sottoinsieme del C++, a meno di una manciata di differenze", perchè dovrei dubitarne? Dopotutto quasi tutti i programmi C si compilano tranquillamente con un compilatore C++. Se mi dice che le funzioni virtual NON causano overhead significativo, in quanto nelle tabelle del compilatore ogni metodo virtuale ha un suo indirizzo e andarlo a prendere a runtime costa come andare a chiamare una funzione qualsiasi, perchè dovrei mettermi a programmare ad oggetti in C se ho a disposizione delle classi in un linguaggio più evoluto?

Lungi anche da me il voler scatenare una flame war, voglio solo confrontarmi :)

pio10021
06-07-2013, 14:47
Questi sono i forum attivi che mi piacciono :D , flamewar o non flamewar i forum sono fatti per discutere, non sono siti d'assistenza e scambiare opionioni non fa mai male; anche se stiamo andando in ot e magari conviene fermarsi entro certo limiti; non voirrei essere frainteso.

Comunque tornando un attimo al discorso C e C++:
il mio dubbio come già detto era se studiare il C conveniva o perdevo tempo, dalle risposte che ho ottenuto emerge(per la maggioranza) che non è una perdita di tempo.
Che poi il fatto che magari il C++ sia più comodo lo capisco, è ovvio che una volta imparato userò per la maggioranza il "++"! Pensavo di prendere il C come un "appendice" del C++, che mi fosse utile per capirlo;
provabilmente comunque in un futuro potrei riusare il C, sono d'accordo con l'idea che "ogni cosa a un suo scopo" e che vanno usati "i giusti strumenti", provabile che a seconda della situazione valuterò che linguaggio usare.
Che il C è abbandonato non ci credo nemmeno io, prendiamo per esempio il caso "Italia", molti sorgenti sono in c(e sembra che gli italiani conoscano solo il C dalle guide che ci sono su internet).

Per molte cose che ho cercato poi la mia risposta è stata sempre C, allegro.h che è una bella libreria è in C, idem curl(che manco son riuscito a mettere su codeblocks ma a quello ci penserò dopo le basi), molta documentazione in italiano.... è in C? No, non esiste :D [apparte scherzi quella documentazione che fà quasi pena è in C, quell'altra fa pena; c'è poco di buono in italiano in C++]

Ma quest'ultimo è un mio parere, anche perchè posso benissimo unire C++ con tali librerie e molti già lo fanno.


Ciò che volevo sapere insomma era semplicemente:
"Studio C per facilitarmi l'apprendimento del C++ dato che esso è basato sul C e sapere qualocosa in più, o perdo tempo e dovrei studiare solo C++"?
E con questa domanda è ovvio che io intendo che studio prima C e poi C++.
A questa risposta per la maggior parte avete risposto che conviene studiare entrambi, però magari ora che ho chiarito attendo qualche risposta perchè magari mi avete frainteso.

Io penso che a questo punto studierò C(se non ottengo risposte contrarie alla precedente domanda) e C++ sui libri in inglese già citati perchè riesco a capirli abbastanza bene, tuttavia ancora non sò se studiare il C su "C Programming language"(issue 2) perchè nonostante dicono che sia il miglior
libro a me sembra un po' vecchiotto, mi conviene studiare su qualcosa di più moderno? Tipo "linguaggio 5 (ed.)" che è aggiornato agli standard C11 ed è in italiano oppure va bene quel libro perchè è ottimo e anche se è un vecchio standard va bene perchè userò principalmente C++?


Poi c'è un ultimissimo problema che ho avuto leggendo "C programming language", ho inviato un mp a un r3((h3r per evitare di andare ot ma ci ho ripensato e posto quà perchè i miei problemi possono essere utili a tutti se chiariti, e siamo in un forum, però non so se devo aprire un'altro topic per evitare di andare ot ma va beh:
(metto tutto tramite spoiler per non dar fastidio dato che è un "mezzo ot" e cito in pratica un pezzo di mp inviato perchè intanto il problema è sempre quello, ho solo apportato qualche "miglioramento" perchè sia più chiaro a tutti, mi riferisco all'mp). Il problema principale è che senza risolvere questo problema non è che possa andare tanto avanti, dato che ho la paura di non aver capito bene gli array(e che il libro sia un po' vecchiotto e abbia qualche errore, dato che i suoi sorgenti non vanno).


Leggiete questo pdf http://net.pku.edu.cn/~course/cs101/...g_Language.pdf e andate a p. 26; dal capitolo 1.5.2 in poi il programma si blocca sul ciclo while in cui c'è !=EOF, su qualunque. Come se l'istruzione non arrivasse mai alla fine, al valore di EOF quindi ._.
Non capisco poi perchè su quel libro si usa getchar e putchar invece che scanf e printf.

Ma questo non è che mi importi molto, pace per quei conteggi! Però mi servivano per capire bene gli array(p. 30 cap. 1.6) che non avevo capito tanto bene; visto che anche lì ho questo problema(quello scritto prima) ho provato a farmi un programma usando quel che ho capito sugli array, lo scopo di tale programmino è determinare il massimo tra dei numeri inseriti in input dall'utente, l'ho ben commentato(però al volo, e anche il sorgente lo scritto al volo come test):
(vedi lo spoiler per il sorgente)

//Determinazione del max tra numeri inseriti in imput tramite gli array
//2013-07-05, 1 versione

#include <stdio.h>

long int array, number[array], temparray, decision1, decision2, max; // Ho messo long int perchè alcune variabili ne necessitano
// e per far al volo ho messo tutto in un long

int main() {
decision1=0, decision2=1; // decision1 e decision2 serviranno dopo per determinare il max tra i numeri
temparray=0; // Questo servirà come array temporaneo al posto di array nell'assegnazione dei valori ai vari number
printf("Inserisci il numero dei numeri:\n");
scanf("%ld",array); // In base al numero inserito dall'utente si setta l'array
for(valueset=array;valueset>=0;valueset--) { /* Ciclo for nel quale vengono assegnati i valori ai number, valueset serve
per assegnare i valori a tutti gli array ma solo finchè non sono "finiti" */
printf("Inserisci il %ld numero: \n",temparray); // Chiede di inserire x numbero, dove x corrisponde a temparray
scanf("%ld",number[temparray]); // Assegna il valore inserito dall'utente al giusto number tramite temparray
temparray++; // temparray incrementa, così che al prossimo inserimento del numero si setti il valore su un'altro array
}
/* Ora che il programma sà il numero degli array e anche il valore di ogni numero si determina il massimo... */
for(array=array;array>=0;array--) { /* ... tramite un ciclo for che continua finchè gli array non sono "finiti" */
if(number[decision1]>=number[decision2]) {
max=number[decision1];
}
else {
max=number[decision2];
}
/* Con queste due righe si determina quale valore corrisponde al numero massimo confrontando due array */
decision1++; //decision1 incrementa, così che al prossimo confronto venga usato l'array successivo
decision2++; //decision2 incrementa, così che al prossimo confronto venga usato l'array successivo
}

printf("%ld",max); // Stampa il valore del numero massimo
return 0; // Esce
}


Il problema è che il compilatore mi dà come errore:
"varably modify number at file scope"
All'inizio pensavo che il nome non si poteva usare, ma non è quello xD. Non riesco proprio a capire il perchè mi dà quell'errore, in italiano vuol dire che number non si può usare per quello scopo ma perchè? Che ho sbagliato sull'utilizzo degli array?



In questo post in pratica ho riordinato un po' i dubbi che mi sono rimasti(tutte le altre domande/dubbi sono chiariti), vi ringrazio in anticipo per le future risposte.

Pio

Edit:

Quando ho scritto non ho notato questo >.<, rispondo ora:

Anch'io sono un semplice studente, anzi anche meno, riporto solo le parole di Stroustrup e altri membri dell'ISO, persone che mi sembrano alquanto rispettabili. Qualcuno potrebbe obiettare che "sono di parte", ma basta guardare qualcuno dei loro discorsi pubblici (come quelli del GoingNative 2012, su YouTube) per capire che non sono lì a vendere un loro prodotto, quel che dicono, lo dicono perchè sono genuinamente interessati a divulgare uno stile di programmazione più moderno, sicuro, robusto e performante.
Quindi, se Stroustrup mi dice che il C è "quasi un sottoinsieme del C++, a meno di una manciata di differenze", perchè dovrei dubitarne? Dopotutto quasi tutti i programmi C si compilano tranquillamente con un compilatore C++. Se mi dice che le funzioni virtual NON causano overhead significativo, in quanto nelle tabelle del compilatore ogni metodo virtuale ha un suo indirizzo e andarlo a prendere a runtime costa come andare a chiamare una funzione qualsiasi, perchè dovrei mettermi a programmare ad oggetti in C se ho a disposizione delle classi in un linguaggio più evoluto?

Lungi anche da me il voler scatenare una flame war, voglio solo confrontarmi
vendettaaaaa è offline Segnala messaggio

Appunto perchè è un "sottoinsieme", più o meno, ho il dubbio se studiare C o no, perchè se è un sottoinsieme studiare prima quello che c'è "sotto", le fondamente, e poi quello che c'è sopra, la casa, potrebbe essermi utile. Non mi rimetto a spiegare tutto perchè ho già scritto all'inizio di questo post qual'era il mio dubbio.

The_ouroboros
06-07-2013, 14:49
Mai prendere tutto per oro colato e mai accettare la risposta più semplice..
Cmq direi che stiamo un attimo divergendo dal post dell Op..

SnakePlissken
06-07-2013, 15:24
Da un po'(che poi per problemi vari in cui non ho avuto tempo non è da molto tempo) uso il C/C++ che mi ha un po' appassionato, il problema è che ho studiato su vare guide su internet e ho una "conoscienza" un tantino" "frammentata", in pratica mi mancano alcune importanti basi e mano a mano che provo a fare qualcosa me ne accorgo sempre di più.
Anche perchè pulrtroppo saltai parte delle basi(buona parte, non dico tutte ma siamo lì; ciò che mi è servito per programmare ciò che ho programmato lo ho imparato, per buona parte, dagli errori che ho fatto, però devo ammettere che sanno spiegare meglio di tutta la schifosa documentazione che gira su internet sulla programmazione, mi stò riferendo a quella sù librerie specifiche) per passare ad allegro.h(liberia per la gestione multimediale, orientata sui videogiochi 2D), che per fortuna ho imparato bene, ma sento sempre più il bisogno di dover farmi quelle basi e forse rifare anche alcune che so già e che magari ho dimenticato.

Volevo un consiglio su un manuale o qualunque cosa che riesca a farmi fare le basi della programmazione C/C++(tenendo conto che non sono uno che stà iniziando ora, ma che qualcosa so già).

Lo chiedo perchè voglio essere sicuro, stavolta, di studiare su buon materiale che mi porti a sapere bene le basi, non sul primo manuale che trovo su ebay insomma; proprio per questo lo sto chiedendo quà.
Per sintetizzare volevo evitare di ricominciare da capo con la programmazione ed evitare di aver perso tempo, studiando su un buon manuale che riesca a mettermi sù quelle basi che mi mancano(per sapere quale manuale chiedo a voi)

[...]

A parte gli errori di ortografia :D (non te la prendere, mi raccomando! :)) dal tuo messaggio pare chiaro che il tuo obiettivo è farti le basi. Sono del parere che per farsi delle basi sia necessario affrontare un argomento delimitato e sviscerarlo per bene, affrontarne tutti gli aspetti, analizzarne i dettagli ed esercitarsi. Il C può essere studiato e compreso in un tempo ragionevole: alla fine avrai la soddisfazione di dire "Uau! Ho imparato un linguaggio!". Se invece ti butti sul C++ ti serviranno diversi mesi per poter dire qualcosa come "Beh, comincio a padroneggiarlo seriamente".




Ciò che volevo sapere insomma era semplicemente:
"Studio C per facilitarmi l'apprendimento del C++ dato che esso è basato sul C e sapere qualocosa in più, o perdo tempo e dovrei studiare solo C++"?
Secondo me sicuramente no! Non ha senso (secondo me) che studi il C per facilitarti l'apprendimento del C++. I concetti che devi affrontare col C sono un decimo di quelli del C++ e puoi benissimo apprenderli studiando direttamente il C++ (se il tuo obiettivo è poi imparare quest'ultimo). Il motivo (unico) per cui ti consiglio di studiare il C è quello che ho espresso qua sopra.

pio10021
06-07-2013, 16:29
Mai prendere tutto per oro colato e mai accettare la risposta più semplice..
Cmq direi che stiamo un attimo divergendo dal post dell Op..

No sbagli, sono solo cambiate le domande ma l'argomento è sempre quello. Dove imparare le basi e come, l'ot stà nel mio spoiler sul problema con gli array e CO ma come già detto in caso estremo posso aprire un'altro topic, ma non posso inondare il forum di thread per domande che girano attorno allo stesso argomento ma che differiscono di una virgola.

Riguardo alla prima riga che hai scritto, non capisco cosa intendi.

A parte gli errori di ortografia :D (non te la prendere, mi raccomando! :)) dal tuo messaggio pare chiaro che il tuo obiettivo è farti le basi. Sono del parere che per farsi delle basi sia necessario affrontare un argomento delimitato e sviscerarlo per bene, affrontarne tutti gli aspetti, analizzarne i dettagli ed esercitarsi. Il C può essere studiato e compreso in un tempo ragionevole: alla fine avrai la soddisfazione di dire "Uau! Ho imparato un linguaggio!". Se invece ti butti sul C++ ti serviranno diversi mesi per poter dire qualcosa come "Beh, comincio a padroneggiarlo seriamente".




Secondo me sicuramente no! Non ha senso (secondo me) che studi il C per facilitarti l'apprendimento del C++. I concetti che devi affrontare col C sono un decimo di quelli del C++ e puoi benissimo apprenderli studiando direttamente il C++ (se il tuo obiettivo è poi imparare quest'ultimo). Il motivo (unico) per cui ti consiglio di studiare il C è quello che ho espresso qua sopra.

Tranquillo sono errori di battitura :D l'italiano lo sò. (tra l'altro ho in programma, prima o poi, di fare un po' di diteggiatura per levare quegli errori e per scrivere un po' più velocemente, e dovrei anche prendermi una sedia regolabile che se nò o sono troppo basso o troppo alto rispetto a come dovrei stare per scrivere).

Beh mi sono accorto effettivamente che il C++ è una buona mazza, credo che andrò veloce giusto giusto per padroneggiare le classi(mi serve per poter creare sorgenti comprensibili) e poi magari ci andrò giù con le giuste attenzioni, ma prima farò comunque il C; anche se non mi aiuterà a capire il C++, lo sempre usato e continuerò a usarlo provabilmente. Vorrà dire che invece che fare html separato lo associerò al C++, per non perdere tempo.

Ora ho chiarito i dubbi se non che non ho idea di quale libro di C usare(la domanda su che libro prendere, C programming language o quello aggironato) e che se non sò se ho appreso gli array, e di conseguenza sono bloccato a dove stò con le basi ._. ;

Se sto andando ot con il problema "array e CO" fatelo sapere che aprirò un'altro topic, anche se mi sembra stupido.

Pio

nico159
06-07-2013, 17:04
Beh mi sono accorto effettivamente che il C++ è una buona mazza, credo che andrò veloce giusto giusto per padroneggiare le classi(mi serve per poter creare sorgenti comprensibili) e poi magari ci andrò giù con le giuste attenzioni
NON farlo

Le classi sono solo uno dei concetti base di C++ - il libro va studiato per ordine, con attenzione, tutto

Scriverai pessimo C++ altrimenti, veramente pessimo

C++ è un molto di più di C con le classi
e che se non sò se ho appreso gli array, e di conseguenza sono bloccato a dove stò con le basi ._. ;
Gli array non esistono.
Quello che tu chiami array è una locazione di memoria di cui sai la dimensione, che tipo di dato sarà presente e a che indirizzo parte

Quando scrivi:
int test [5];

Stai dicendo a C:
Nello stack devi riservarmi uno spazio di memoria che è pari a 5 * sizeof(int)

test non è un array, gli array non esistono

test è un puntatore che punta all'inizio del blocco di memoria che hai chiesto di riservarti

Quando scrivi:
int x = test[1];
Significa:
int x = *(test + 1);

Quando scrivi:
int x = test[0];
Significa:
int x = *test;

La differenza sostanziale è in sizeof(test)

In poche parole, la sintassi per gli array non è altro che un syntactic sugar per rendere più facile il lavoro al programmatore

Significa che devi conoscere i puntatori - sono qualcosa di fondamentale anche in C++ - per comprendere la vera natura di array
In C++ Primer Plus è spiegato molto bene questo passaggio

nico159
06-07-2013, 17:32
Mentre scrivevo fasi ad effetto come "gli array non esistono" mi è tornato in mente Zed Shaw :sofico:

E mi son ricordato della sua collezione di libri "The Hard Way"

http://c.learncodethehardway.org/book/
E' ancora in alpha, ma è gratuitamente leggibile online

Fammi sapere che ne pensi, ha una struttura molto diversa dai classici libri, ma dovrebbe essere molto buono

Notare come Zed dica di non trattare gli array come syntactic sugar, ma qualcosa di proprio:
Pointers Are Not Arrays

No matter what, you should never think that pointers and arrays are the same thing. They are not the same thing, even though C lets you work with them in many of the same ways. For example, if you do sizeof(cur_age) in the code above, you would get the size of the pointer, not the size of what it points at. If you want the size of the full array, you have to use the array's name, age as I did on line 12.

vendettaaaaa
06-07-2013, 18:02
Mentre scrivevo fasi ad effetto come "gli array non esistono" mi è tornato in mente Zed Shaw :sofico:

E mi son ricordato della sua collezione di libri "The Hard Way"

http://c.learncodethehardway.org/book/
E' ancora in alpha, ma è gratuitamente leggibile online

Fammi sapere che ne pensi, ha una struttura molto diversa dai classici libri, ma dovrebbe essere molto buono

Notare come Zad dica di non trattare gli array come syntatic sugar, ma qualcosa di proprio:
Gli array esistono invece, perlomeno in C++11. Anche se mi hanno sempre detto il contrario, ultimamente ho scoperto i seguenti fatti:
- In TC++ PL 4th, Stroustrup dice "esiste una conversione implicita da T[] a T*
- Il range for funziona con un array, ma non con un puntatore
- Molti template prendono come argomento T[] anzichè T*
Detto questo, credo che la distinzione sia solo interna al compilatore che tiene silenziosamente traccia della dimensione di un array, dichiarata o dedotta che sia; nella memoria a tutti gli effetti le cose coincidono e non c'è modo di tirar fuori la dimensione di un array (non ad esempio come nelle stringhe FORTRAN77, dove la loro dimensione è nascosta e può essere ottenuta con una funzione intrinseca).

nico159
06-07-2013, 18:12
Sì hai ragione, è sbagliato considerare array come un syntactic sugar

vendettaaaaa
06-07-2013, 20:28
* *

ci sono svariati ambienti in cui l'astrazione non è possibile o deleteria.
Ci credo, ma fate esempi pls, son curioso!

pio10021
06-07-2013, 22:05
Rispondo senza quotare perchè se non lo facessi farei un poema.

Riguardo all'andare veloci sulle classi grazie del consiglio, ci andrò piano; mi mancherà la programmazione "un po' più interessante" ma capisco che è importante(sotto spiego perchè reputo questa parte meno interessante)

Riguardo agli array quà ci spenderò un po' di parole:

Premetto prima di tutto che mi sono riandato a studiare puntatori e array per qualche buona ora, avevo una tale confusione che ho dovuto continuare a studiare mfinchè in pratica oggi cosa che sapevo si è distrutta e alla fine mi è entrata la teoria giusta >.<, ma dico ore e ore ci son volute, fino a quando tutte le teorie sbagliate che mi ero fatto le ho perse(per molti versi ora ho rattoppato un bel po' di "buchi di conoscienza", che è il mio modo di chiamare quando hai dei veri e propri "buchi" tra ciò che conosci, concetti mancanti insomma).
Ora sarei per censurare alcune stupide guide che ho letto, ma lasciamo perdere.

Premetto anche che a quest'ora io non ragiono più, cioè non intendo che vado a letto ma che ormai non riesco più di tanto a programmare per bene, verso le 21.00 il cervello comincia a fare cilecca per la programmazione e farla è una pazzia(ci riesco ma prima devo svegliarmi per bene :D ).

Detto queste due cose tornerò sul mio problema sugli array,

ok l'array è uno spazio allocato in memoria dove gli indirizzi si susseguono([0] a hanno tutti spazi conseguenti) e perciò sono strettamente collegati ai puntatori e posso gestirli anche in quel modo(più semplice così, ecco perchè syntactic sugar, lo ho capito poco fà per poi capire che non lo sono esattamente). Tuttavia non capisco che errore possa aver fatto su quel sorgente, ok non sapevo tutto ciò ma comunque resta di fatto che non mi sembrano che ci siano errori; ma domani riguarderò il sorgente, a mente sveglia magari trovo qualcosa(e ora provabile che magari ho sparato anche qualcosa, ma va beh).

Il fatto che reputi questa parte di programmazione noiosa è solo perchè più leggo teorie giuste e più mi sembra di dover tornare indietro, in pratica mi stò buttando giù un sacco di teorie sbagliate e costruendo quelle giuste; il problema è che per buttare giù quelle teorie ci vuole, ed è molto più difficile che imparare da 0. Ma sforzandomi ci sto riuscendo, anche se al momento sto aspettando di sistemare quel sorgente sugli array(continuo a dire sugli array ma ho capito che quelle variabili non sono array! non vorrei fraintendeste). Le guide di html.it comunque non è che sono così imprecise, nico non so se l'hai notato ma almeno la guida in C sembra la traduzione di The C programming language, quasi identica! Tanto chè per far prima credo che associerò le due guide leggendo anche i pezzi italiani al volo, così capisco meglio.


Riguardo al the hard way, prima preferisco fare l'easy way. Gli ho dato una letta al volo ma preferisco prima rifare le basi con le vie semplici(se "the hard way" è un nome per figura ho appena fatto una figura da ... :D ).
Con ciò non voglio dire che lo boccio, ma voglio dire che prima prefeirsco ripassare alcune cose.
Voglio evitare in tutti i modi di farmi altra confusione in testa, per questo studio, ora, su libri ben strutturati che riescano a rifarmi le basi.

Le altre risposte non c'è bisogno di commentarle, cioè dicono cose giuste(o almeno credo) e forse un po' ot, ma come detto i forum sono fatti per discutere.

Insomma il problema sugli "array" persiste.

PS: Non prendete troppo seriamente ciò che ho scritto, oltre al fatto che a quet'ora ho esco(oggi no) o riposo c'è il fatto che oggi non ho dormito(ho la festa della birra con musica a palla davanti casa :D, e glieri mi ci sono fermato per un po' ).

Domani rivedrò quel sorgente e questo post, se intando qualcuno sà come posso risolvere il problema e mi da una mano mi fà un gran piacere.

[I]Pio

WarDuck
08-07-2013, 00:47
Gli array esistono invece, perlomeno in C++11. Anche se mi hanno sempre detto il contrario, ultimamente ho scoperto i seguenti fatti:
- In TC++ PL 4th, Stroustrup dice "esiste una conversione implicita da T[] a T*
- Il range for funziona con un array, ma non con un puntatore
- Molti template prendono come argomento T[] anzichè T*
Detto questo, credo che la distinzione sia solo interna al compilatore che tiene silenziosamente traccia della dimensione di un array, dichiarata o dedotta che sia; nella memoria a tutti gli effetti le cose coincidono e non c'è modo di tirar fuori la dimensione di un array (non ad esempio come nelle stringhe FORTRAN77, dove la loro dimensione è nascosta e può essere ottenuta con una funzione intrinseca).

Mah in C++ la questione rilevante non è certo quella se un array debba essere considerato o meno un puntatore.

Il punto è che se si può sarebbe meglio evitare i puntatori, usare i reference o al più se proprio è necessario unique_ptr o shared_ptr.

Detto ciò non è che C++ sia la manna dal cielo, molte librerie tra cui la stessa stdlib e le odiose boost hanno ben poco di object oriented, ma sono molto più template-based, il che a qualcuno può piacere, può aumentare l'efficienza, ma rende tutto molto molto perverso.

Sono del parere che alcuni costrutti del C++ vadano usati con moderazione e buon senso, senza abusarne, pena codice veramente pesante da leggere.

nico159
08-07-2013, 09:45
Detto ciò non è che C++ sia la manna dal cielo, molte librerie tra cui la stessa stdlib e le odiose boost hanno ben poco di object oriented, ma sono molto più template-based, il che a qualcuno può piacere, può aumentare l'efficienza, ma rende tutto molto molto perverso.
Dal tuo discorso sai cosa ne deriva? Che l'OOP è la "manna dal cielo" - cosa che assolutamente non è vera

Quando si fanno certe affermazioni, bisogna ricordare che ogni cosa ha degli obiettivi
L'obiettivo della STL è l'afficienza

Non la fiera per dimostrare quanto si è bravi con l'OOP, non per far vedere quando quella libreria sia capace di gestire gli errori del programmatore

E' questo è per design

Non interessa questo? Ma allora perchè stai usando C++ :)

Esistono versioni della STL con vari check a runtime (STLPort), le versioni con flag di debug tipo quella MS a runtime anche eseguono vari controlli
Ma c'è un concetto di base: sei chiamato a conoscere quello che fai
Sono del parere che alcuni costrutti del C++ vadano usati con moderazione e buon senso, senza abusarne, pena codice veramente pesante da leggere.
Vero per qualsiasi linguaggio che sia minimamente complesso

Una cosa divertente, che si collega al discorso di prima
Molti sviluppatori con anni di esperienza alle spalle in ambienti altamente professionali, sai cosa fanno?
Stanno ben attenti a non abusare dell'OOP :D

nico159
08-07-2013, 11:07
...
Pio
int x[5];

Quindi C riserva uno spazio di memoria pari a sizeof(int) * 5;

Facciamo conto che sizeof(int) dia come risultato 4
Significa che ogni int richiede 4 byte (in C/C++ l'unità più piccola accessibile è il byte)
Quindi stai dicendo di riservarti un'area di memoria pari a 20 byte
Cosa fa C?
Ti riserva questo


Dov'è l'inizio e la fine tra il primo e secondo elemento? Dove sono i tuoi int? [B]Non esiste niente di tutto questo

Cos'è x? E' esattamente un puntatore che punta a byte1
E' un puntatore di int - quindi il linguaggio sa che a partire dall'indirizzo byte1 fino all'inidirizzo byte4 (sizeof(int)) deve trattare quei 4 byte come un int

Quando scrivi
x[0] = 0;
Oppure
*x = 0;
C dice alla cpu di spostare i 4 byte che compongono l'int 0 a partire dalla locazione a cui punta x, ovvero da byte1 a byte4

Quando scrivi
x[2] = 2;
Oppure
*(x + 2) = 2;

Stai dicendo:
Questo è un puntatore di int: aggiungi 2 partendo da x
Cosa significa aggiungere o togliere qualcosa ad puntatore?
Significa:
Io so che è un puntatore di int, so che vuoi 2 int dopo questo indirizzo
Quindi viene calcolato di quanti byte avanzare dopo ciò che punta x: (sizeof(int) * 2)
Non si avanza byte per byte, ma per sizeof(T)

*(x + 2)
Quindi è:
Parti dalla fine di ciò che punta x ovvero byte4 ed aggiungi 8
*(x + 2) significa un puntatore di int che punta al byte12

Cosa succede se per qualche motivo dici al linguaggio di non trattare più x come un puntatore di int ma di char?
sizeof(char) è 1
Quindi
x[0] = '0';
Significa partendo dal byte1 va assegnato il byte corrispondendi al carattere '0'
Cosa significa?
x[2] = '2';
Significa:
Che al byte3 va assegnato il byte corrispondendi al carattere '2'

Stessa locazione di memoria, ha cambiato completamente significando dicendo a C di non trattare x come un puntatore di int, ma di char

Non hai cambiato nulla nella versione a livello "macchina"
Non sono stati modificati registi, memoria, nessuna operazione
Hai solo istruito il linguaggio su come trattare quella locazione di memoria

Quindi cosa sono i puntatori? Un elemento che sa:
- A che indirizzo punta
- A che tipo corrisponde quella locazione di memoria

Cos'è la memoria per il linguaggio? Un susseguirsi di byte
Cosa sono i puntatori per il linguaggio? Una maniera per istruire il linguaggio che da un byte ennessimo fino a sizeof(T) quel blocco di memoria è un oggetto T, ed una maniera per spostarsi all'interno di essa

Metti insieme le due cose, e dovresti avere una visione più completa del tutto

The_ouroboros
08-07-2013, 11:26
qualche riferimento (http://cs.smith.edu/~thiebaut/ArtOfAssembly/CH05/CH05-2.html) per gli array :)

marco.r
08-07-2013, 13:28
C++ e C sono due linguaggi diversi e quindi non ha senso studiare un linguaggio per imparare l'altro.
Vuoi imparare il C++ ? Studia il C++. Vuoi imparare il C ? Studia il C.
E' semplicissimo :D
Passare da programmare C come si deve a programmare C++ come si deve (e viceversa) richiede un cambio di approccio per cui bisogna "dimenticare" alcune cose e impararne altre.
Nel passaggio C++ -> C pero' sei costretto al cambio mentre nel caso contrario no (potresti usare il C++ come un dialetto del C, che il piu' delle volte e' sbagliato). Per questo motivo, e per il fatto sembri essere interessato piu' al C++, direi parti subito col C++ e approccia solo successivamente il C.

WarDuck
08-07-2013, 15:12
Dal tuo discorso sai cosa ne deriva? Che l'OOP è la "manna dal cielo" - cosa che assolutamente non è vera


E da dove la derivi di grazia questa cosa?


Quando si fanno certe affermazioni, bisogna ricordare che ogni cosa ha degli obiettivi
L'obiettivo della STL è l'afficienza


Che permettimi di dirlo ho i miei dubbi sia stato pienamente raggiunto, tant'è che per certi versi si ricorre ancora ai "vecchi" costrutti C o a librerie di terze parti.

Poi vabbè c'è sempre chi cerca di giustificare le carenze di una libreria standard dicendo che "si trovano altre in giro" o che "te la puoi fare da te".

Peccato che sono passati quanti? 30 anni? Le cose dovrebbero evolvere, meno male che almeno in C++11 si sono ricordati che esiste il multi-threading.


Non la fiera per dimostrare quanto si è bravi con l'OOP, non per far vedere quando quella libreria sia capace di gestire gli errori del programmatore

E' questo è per design

Non interessa questo? Ma allora perchè stai usando C++ :)


Molti degli strumenti che hanno messo di recente a disposizione in C++ vanno nella direzione di gestire la complessità, che non significa necessariamente "mostrare i muscoli".

L'OOP è stato introdotto proprio per gestire la complessità.

E' vero che C++ non è soltanto C con le classi, ma non si può neanche far finta che le classi non siano l'elemento fondante del C++ rispetto al C.


Esistono versioni della STL con vari check a runtime (STLPort), le versioni con flag di debug tipo quella MS a runtime anche eseguono vari controlli


Quindi? Non è di questo che si sta parlando. Sto parlando dell'abuso della meta-programmazione in C++, se vuoi un esempio prendi le boost, a me viene il ribrezzo ogni volta che per un qualche motivo ne ho a che fare.

Ma sono fatto così, preferisco l'eleganza nel codice alle prestazioni estreme (per le quali di certo non uso la stdlib c++).


Ma c'è un concetto di base: sei chiamato a conoscere quello che fai


Oddio, si spera di si.


Una cosa divertente, che si collega al discorso di prima
Molti sviluppatori con anni di esperienza alle spalle in ambienti altamente professionali, sai cosa fanno?
Stanno ben attenti a non abusare dell'OOP :D

Ognuno è libero di sviluppare come meglio crede, purtroppo o per fortuna C++ da una grande libertà a tutti di programmare con lo stile che si preferisce.

Ma preferisco 100 volte abusare di OOP che abusare di meta-programmazione.

nico159
08-07-2013, 15:55
E da dove la derivi di grazia questa cosa?
Mi aveva portato il tuo "hanno ben poco di object oriented", ma devo aver frainteso


Che permettimi di dirlo ho i miei dubbi sia stato pienamente raggiunto, tant'è che per certi versi si ricorre ancora ai "vecchi" costrutti C o a librerie di terze parti.
Se una libreria bastasse a sistemare i bisogni di tutti, non sarebbe più lavoro per noi programmatori :)

Comunque sia, molti costrutti della STL vengono mappati alla loro controparte in C (come la gestione delle stringhe) dal compilatore

Poi vabbè c'è sempre chi cerca di giustificare le carenze di una libreria standard dicendo che "si trovano altre in giro" o che "te la puoi fare da te".
Se hai seguito qualche talk di gente, lavora allo standard ISO, e non il primo di turno
Ti accorgerai che è un problema nodo e che si vuole sistemarlo

Peccato che sono passati quanti? 30 anni? Le cose dovrebbero evolvere, meno male che almeno in C++11 si sono ricordati che esiste il multi-threading.
Ma sì infatti, C++11 è un enorme passo in avanti

Molti degli strumenti che hanno messo di recente a disposizione in C++ vanno nella direzione di gestire la complessità, che non significa necessariamente "mostrare i muscoli".

L'OOP è stato introdotto proprio per gestire la complessità.

E' vero che C++ non è soltanto C con le classi, ma non si può neanche far finta che le classi non siano l'elemento fondante del C++ rispetto al C.
E l'OOP non è l'unico metodo per gestire la complessità

Quindi? Non è di questo che si sta parlando. Sto parlando dell'abuso della meta-programmazione in C++, se vuoi un esempio prendi le boost, a me viene il ribrezzo ogni volta che per un qualche motivo ne ho a che fare.

Era un discorso collegato al sapere "cosa si sta facendo"
Conoscere il linguaggio, conoscere come usare una libreria, comprenere gli errori del compilatore

Ma sono fatto così, preferisco l'eleganza nel codice alle prestazioni estreme (per le quali di certo non uso la stdlib c++).
C++ cerca di essere una via di mezzo
http://www.cplusplus-soup.com/2013/05/hiatus-and-reflections.html
Il messaggio è tutto molto interessante, ma se scorri, c'è un paragrafo dedicato a C++ in Google

Ognuno è libero di sviluppare come meglio crede, purtroppo o per fortuna C++ da una grande libertà a tutti di programmare con lo stile che si preferisce.

Ma preferisco 100 volte abusare di OOP che abusare di meta-programmazione.
E' appunto come dici tu, una questione di stile (anche se in alcuni casi, l'OOP non è viabile)
Esempio pratico è il linguaggio D
Tra i suoi obiettivi iniziali, c'era eliminare la meta programmazione
D nasce senza meta programmazione
Ma da un pricipio che ai più pare corretto (sì!! i template fanno schifo!!!) si sono resi conto che la metaprogrammazione ha i suoi utilizzi - ora D ha un artiglieria enorme per la metaprogrammazione, maggiore anche di C++
Durante il DConf, la principale azienda che usa D a livello commerciale (è interamente basata su D) ha dichiarato che la metaprogrammazione è uno dei principali vantaggi che ha D rispetto i concorrenti - che la metaprogrammazione ha permesso di limitare la complessità del codice ;)

E poi, hanno anche detto che la metaprogrammazione fa bene alla salute, perchè fa credere i programmatori più intelligenti :sofico:
E se ti può interessare qualche argomento più "C++":
http://www.youtube.com/watch?v=_BpMYeUFXv8&feature=youtu.be
Questa volta, da un ing Adobe che lavora a PS

(r3((h3r
08-07-2013, 18:01
Forse hai frainteso, ma almeno dal tuo commento capisco che il C è un po' inusato e abbandonato a favore del C++
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

pio10021
09-07-2013, 18:47
Premetto che non ho potuto usare internet per qualche giorno, e il problemino sugli array l'ho risolto da un po'. Come un idiota avevo definito la variabile con un array a cui viene assegnato il valore dopo la definizione, l'ho detto che ci dovevo guardare a mente lucida :D . Altro errore era quello del confronto, in cui quel confronto funzionava solo se erano messi in ordine crescente.
Sistemato tutto.

@nico159(non cito per abbreviare il post):

Grazie per il chiarimento, il fatto che venga una variabile di tipo int con degli array si avanzi di 4 non l'avevo considerato(4 considerata la dimensione sul mio pc).
Nemmeno The C programming language lo considera comunque, alla faccia del miglior libro della storia.

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Si infatti userò entrambi il linguaggi, senza contare che il C mi è sempre piaciuto(per ironia della sorte inziia con il C++, poi però piano piano ho usato sempre e solo C, forse perchè la documentazione che leggevo parlava di C. Non ricordo nemmeno nulla di come iniziai perchè ho inziato un bel po' di tempo fà, solo che per vari imprevisti per mesi ho fatto poco che niente).

Il resto sono discussione varie sul confronto C e C++, array e puntatori.

Ormai penso che il topic è quasi "risolto", però ho anche qualche serio dubbio sugli array:

Ho pensato, e credo sia così, che se definisco un array di 10 mi viene riservato uno spazio a cui accedo con gli indici da 0 a 9, avendo appunto "10 variabili"; però nel mio programma corretto gli indici vanno da 0 a 10, avendo "11 variabili" o.o, perchè?
In the programming language 2 edizione confermano quel che pensavo e tutti confermano ciò, allora perchè io posso accedere magicamente a un indice in più e questo mi viene considerato anche nel confronto per determinare il numero massimo?
Se serve posto il sorgente, ma dubito che quì centri il sorgente.

vendettaaaaa
09-07-2013, 18:56
Premetto che non ho potuto usare internet per qualche giorno, e il problemino sugli array l'ho risolto da un po'. Come un idiota avevo definito la variabile con un array a cui viene assegnato il valore dopo la definizione, l'ho detto che ci dovevo guardare a mente lucida :D . Altro errore era quello del confronto, in cui quel confronto funzionava solo se erano messi in ordine crescente.
Sistemato tutto.

@nico159(non cito per abbreviare il post):

Grazie per il chiarimento, il fatto che venga una variabile di tipo int con degli array si avanzi di 4 non l'avevo considerato(4 considerata la dimensione sul mio pc).
Nemmeno The C programming language lo considera comunque, alla faccia del miglior libro della storia.



Si infatti userò entrambi il linguaggi, senza contare che il C mi è sempre piaciuto(per ironia della sorte inziia con il C++, poi però piano piano ho usato sempre e solo C, forse perchè la documentazione che leggevo parlava di C. Non ricordo nemmeno nulla di come iniziai perchè ho inziato un bel po' di tempo fà, solo che per vari imprevisti per mesi ho fatto poco che niente).

Il resto sono discussione varie sul confronto C e C++, array e puntatori.

Ormai penso che il topic è quasi "risolto", però ho anche qualche serio dubbio sugli array:

Ho pensato, e credo sia così, che se definisco un array di 10 mi viene riservato uno spazio a cui accedo con gli indici da 0 a 9, avendo appunto "10 variabili"; però nel mio programma corretto gli indici vanno da 0 a 10, avendo "11 variabili" o.o, perchè?
In the programming language 2 edizione confermano quel che pensavo e tutti confermano ciò, allora perchè io posso accedere magicamente a un indice in più e questo mi viene considerato anche nel confronto per determinare il numero massimo?
Se serve posto il sorgente, ma dubito che quì centri il sorgente.
Puoi anche accedere all'elemento 1156esimo, ma cosa c'è in quelle 4 celle di memoria (cioè in quei 4 byte, cioè: che numero è quell'intero?)?
Ricorda che i vettori sono solo puntatori potenzialmente a TUTTA la memoria e non controllano che l'accesso ad un dato elemento sia valido. Per questo si usano costrutti di più alto livello (più intelligenti) come std::vector in C++, che possono controllare il range durante operazioni di accesso.
Divertiti col C se proprio decidi di usarlo solo perchè te lo dice una classifica :asd:

pio10021
09-07-2013, 19:19
Puoi anche accedere all'elemento 1156esimo, ma cosa c'è in quelle 4 celle di memoria (cioè in quei 4 byte, cioè: che numero è quell'intero?)?
Ricorda che i vettori sono solo puntatori potenzialmente a TUTTA la memoria e non controllano che l'accesso ad un dato elemento sia valido. Per questo si usano costrutti di più alto livello (più intelligenti) come std::vector in C++, che possono controllare il range durante operazioni di accesso.
Divertiti col C se proprio decidi di usarlo solo perchè te lo dice una classifica :asd:

"Divertiti col C se proprio decidi di usarlo solo perchè te lo dice una classifica"

Se ci ho programmato fin'ora non sarà facile usare solo C++, continuerò ad usarlo di sicuro così come c'è gente che usa l'assembly(per fare cose stupide poi non è che debba usare perforza le classi, e se scrivo std::cout << "Hello world" o printf("Hello world") il risultato è lo stesso, ma per me è più semplice C in questo caso).
Niente è inutile, tutto può tornare utile a seconda di come si usa.
La classifica poi è ovvio che non conti così tanto, alla fine può essere influenzata anhce dai ragazzini che usano C perchè il professore ha spiegato quello(perchè ha scuola spiegano la programmazione :eek: , io credevo che l'indirizzo fosse "Impariamo a usare word e cazzeggiamo" , ovviamente questo è retorico con un bel pizzico di ironico).

Ho risolto comunque il problema, è strano avevo capito che un pointer può puntare a qualunque indirizzo così come posso usare qualunque array eppure non sò perchè non ho corretto. Il problema era che anche se avevo capito dov'era l'errore non riuscivo correttamente a correggerlo, e avrò associato il problema a un discorso fuori dal mio sorgente.

Spiego in italiano:
In poche parole il problema era semplicemente nei cicli che intervenivano per tutti gli array finchè essi non erano "finiti", solo che non ho considerato in quei cicli che l'array parte da 0. Il tal caso il bug era legato al fatto che come numero massimo mi scappava il valore dell'indice che non dovrebbe esserci, il suo indirizzo per precisione visto che il valore non lo ha.
Eppure ho ancora l'impressione da alcune prove che ho fatto che se definisco x[5] posso accedere e usare anche x[5], avendo difatto 6 spazi riservati, un sizeof(int)*6; forse quest'impressione la ho ottenuta sbagliando qualcosa e quindi lasciamo perdere. Ok che posso accedere anche all'elemento 1156esimo, ma non posso assegnarvi un valore; eppure io lo fatto. Ma come già detto questo potrebbe essere legato a un errore, vattela a pesca quale(forse anche se a me sembrava che accedevo a x[5] difatto usavo x[4] per qualche problema nell'assegnazione dei valori e nel confronto per determinare il numero massimo, e non me ne sono accorto). Al 90% sono sicuro che l'impressione è sbagliata, quindi lasciamo perdere(ho fatto anche un apposito test definendo un int x[5] e provando a assegnando un valore a x[100], come immaginavo il programma si blocca quando prova ad assegnare il valore all'indice 100).

Concludendo direi che ormai ho risolto tutti i problemi, rifarò le basi sui libri postati e spero di non aver più problemi simili. Grazie a tutti per le risposte.


Pio

vendettaaaaa
09-07-2013, 20:16
Eppure ho ancora l'impressione da alcune prove che ho fatto che se definisco x[5] posso accedere e usare anche x[5], avendo difatto 6 spazi riservati, un sizeof(int)*6;
Non hai ancora capito bene: se dichiari int x[5], puoi benissimo assegnare x[5] = 3. E' un errore, ma se ti va di culo non succede niente, perchè scrivi su memoria libera, altrimenti (la maggior parte delle volte) avrai un segmentation fault o altri errori legati alla RAM perchè tenti di scrivere su memoria occupata in toto, o parzialmente, da un'altra variabile.
Facciamo un'analogia: scrivere int x[5] è come chiedere al padrone di un cinema, in cui le poltrone sono messe tutte in fila, di riservarti 5 posti a sedere. Poi, una volta ottenuti i biglietti, se i posti sono in mezzo alla fila, puoi benissimo sederti al sesto posto (sesto a partire dal primo che ti è stato riservato). Se non c'è nessuno, benissimo, altrimenti potresti prenderti un calcio nel culo da chi ha comprato il biglietto per quel posto.
Claro?

Cmq prenditela comoda, la comprensione di queste cose arriverà gradualmente, scrivendo codice e sbagliando più e più volte.

pio10021
09-07-2013, 22:17
Non hai ancora capito bene: se dichiari int x[5], puoi benissimo assegnare x[5] = 3. E' un errore, ma se ti va di culo non succede niente, perchè scrivi su memoria libera, altrimenti (la maggior parte delle volte) avrai un segmentation fault o altri errori legati alla RAM perchè tenti di scrivere su memoria occupata in toto, o parzialmente, da un'altra variabile.
Facciamo un'analogia: scrivere int x[5] è come chiedere al padrone di un cinema, in cui le poltrone sono messe tutte in fila, di riservarti 5 posti a sedere. Poi, una volta ottenuti i biglietti, se i posti sono in mezzo alla fila, puoi benissimo sederti al sesto posto (sesto a partire dal primo che ti è stato riservato). Se non c'è nessuno, benissimo, altrimenti potresti prenderti un calcio nel culo da chi ha comprato il biglietto per quel posto.
Claro?

Cmq prenditela comoda, la comprensione di queste cose arriverà gradualmente, scrivendo codice e sbagliando più e più volte.

Però c'ero quasi :D , una botte al cerchio una alla alla botte e prima o poi ci si arriva, comunque imparare dagli errori? Sono stati i miei maestri per troppe volte, per questo mi sono deciso di fare le basi per bene(con ciò non escludo che non incontrerò mai più i "bug").

Bello l'esempio delle poltrone, molto fine :D ; apparte scherzi grazie per la precisazione.

Questo spiega perchè forse con x[5] è andata e con x[100] no, tipo.

Per quanto mi riguarda non "abuserò" mai della memoria.


Pio