Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Google ha appena rinnovato la sua celebre serie A con il Pixel 10a, lo smartphone della serie più conveniente se consideriamo il rapporto tra costo e prestazioni. Con il chip Tensor G4, un design raffinato soprattutto sul retro e l'integrazione profonda di Gemini, il colosso di Mountain View promette un'esperienza premium a un prezzo accessibile. E il retro non ha nessuno scalino
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
Al MWC Qualcomm annuncia una coalizione industriale per lanciare il 6G entro il 2029 e introduce agenti IA per la gestione autonoma della RAN. Ericsson, presente sul palco, conferma la direzione: le reti del futuro saranno IA-native fin dalla progettazione
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air è un ultraleggero da 1 kg con Ryzen 5 6600H, display 14" 16:10 e 16 GB LPDDR5. Offre buona portabilità, autonomia discreta e costruzione in alluminio, ma storage PCIe 3.0 e RAM saldata limitano l'espandibilità. A 549 euro sfida brand più noti nella stessa fascia di mercato.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-01-2012, 21:13   #1
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
C++ compilato con GCC (-lstdstdcc++)

Salva a tutti!

Come molti di voi sapranno è possibile compilare, ovviamente, un'applicazione C++ usando G++, ma anche più esoticamente, usando il caro vecchio GCC linkando una libreria alquanto interessante.. libstdc++ che contiene l'intero runtime C++

Mi chiedo questo mi permette di usare tutto il C++ in un programma che magari è abbastanza C liscio, ma magari voglio usare senza wrapper o menate una libreria C++? Fino a dove posso spingermi?
  1. Posso usare new() e delete()? Direi a naso, sì!
  2. Posso cresare/estendere una classe? No... direi di no... che C è?
  3. Posso usare ereditarietà? Boh?
  4. e polimorfismo? No?
  5. operator overloading? Assolutamente no, direi!
  6. overloading di funzioni? Magara

Cosa mi dite? Fino a quanto mi possa spingere?

Lasciando da parte, per ora, che magari non è così elegante mischiare così 2 linguaggio vomre fosse antani per quanto stretti parenti... io vedo ad ora, vantaggi:
  • Usare GCC che è meno "anale" non rompe le scatole che debbo castare void* (perché è il jolly!) o che debbo fare un cast da int a short
  • Posso avere l'illusione di stare programmando in C legacy (molto legacy) così i capi non si accorgono che sto usando C++ mentre erano distratti! Ecco perché molti lo fanno... suppongo

Ditemi, ditemi son curioso come un cavallo
fano è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 11:28   #2
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Non farti fregare dai nomi. Gcc non fa altro che chiamare g++ quando gli passi un file c++.

Semmai il problema si porrebbe se cerchi di compilare un file .c con g++. Il file verrebbe compilato come se fosse c++ e non c. Ovviamente essendo c++ un superset di c lo compila.

La differenza è che però c++ ha alcune regole in più e altre differenti dal c, per cui vedresti warnings dove prima non li vedevi e altre cose del genere.

Niente di terribile comunque, oltre al fatto che g++ compilerebbe il c linkando con libstdc++
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 14:17   #3
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
Allora vediamo se riesco a spiegarmi un pochino meglio supponiamo che io ho questo programmino che risiede in un .c:

Codice:
int
main(void)
{
    bubbu *a = new bubbu();

    printf("This a C or C++ program?\n");

    [...]

    delete a;

    return EXIT_SUCCES; /// = 0
}
La classe "bubbu" risiede in un libreria C++ compilata normalmente con g++; una normalissima libreria C++!

Supponiamo ora che io volglia compilare questo .c ho tre possibilità:
  1. gcc -i test.c -o test ---> NON COMPILA non sa cosa sono new e delete
  2. g++ -i test.c -o test ---> il compilato è un programma C++ il capo mi fa il cullo! Il C++ è VIETATO!
  3. gcc -i test.c -o test -lstdc++ ---> il compilato è un programma C? Che però conosce qualcosa anche del C++... conosce tutto? Tutto, tutto? C++ è una libreria ? Io non credo Comunque il capo è fregato

E' più chiaro qual è il mio dubbio, ora?
SO che (3) va perché l'abbiamo fatto; il programma gira bello sereno ed è in produzione da 2-3 anni (ci passate tutti i giorni se siete d'Incisa e usa il TelePass ) quindi SO che va... ma NON so come fa a farlo

Lo so, lo so certe curiosità a volte è meglio tenersele... ora voi mi dite che NON potrebbe funzionare magar
fano è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 15:32   #4
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Bella domanda. Ho provato quel codice e il compilatore si lamenta fin dall'inizio, dicendo che new non esiste.

Io sto usando la versione 4.6.1, non so se le versioni precedenti si comportassero diversamente, però è impossibile che interpreti quel codice come C, altrimenti dovrebbe lamentarsi di new e delete.

Quindi temo proprio che l'eseguibile è compilato tramite g++
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 16:29   #5
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
io sapevo questo:

http://www.bo.cnr.it/corsi-di-inform...6Linuxgcc.html

quindi continuo a non capire quanto sia fondamentale questa differenza...
vecchiotta come guida

attualmente g++ e gcc sono due eseguibili distinti...in passato gcc richiamava g++ quando opportuno, oggi invece ho dovuto notare che non funge più in questo modo

ricordo benissimo che 2-3 anni fa compilavo i sorgenti c++ con gcc, mentre oggi mi dice che non capisce cos'è new
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 20:45   #6
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
Quote:
Originariamente inviato da pabloski Guarda i messaggi
Bella domanda. Ho provato quel codice e il compilatore si lamenta fin dall'inizio, dicendo che new non esiste.

Io sto usando la versione 4.6.1, non so se le versioni precedenti si comportassero diversamente, però è impossibile che interpreti quel codice come C, altrimenti dovrebbe lamentarsi di new e delete.

Quindi temo proprio che l'eseguibile è compilato tramite g++
Mai quando ha compilato con listdc++?

Il gcc liscio, ovviamente, sì non è in grado di compilarlo

Al momento non ho VirtualBox installato, ma dovrebbe andare a naso

Il Problema è mettendo che compili ottenga il binario e funzioi pure senza corare... che cosa è il mio software?

Esso è:
  1. Un programma C che linka semplicemente delle librerie con un nome esotico (libbubu e libstdcc++)
  2. Un programma C++ perchè g++ è gcc solo che automaticamente linkato col C++ runtime (aka libstdc++ come sapete)
  3. Un programma né C né C++, ma qualcosa di più esotico... uno strano ibrido C+ o C--?

Ce dite?
fano è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 21:35   #7
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
Eppure, corregimi, se sbaglio l'assembler ottenuto da GCC e quello ottenuto da G++ è differente, giusto?

Uno ha tutto l'overhead del C++ (ctor, dtor ecc...) l'altro essendo C è quasi assembler di suo

Lasciamo stare il compilato, dai... diciamo che dopo il linking non è più riconoscibile (in realtà se ce l'hai grosso, IMHO, lo vedi che è C++)... ma il mio file .c è codice scritto in c o in c++?

SI fa, è bello, brutto, rischioso, pericoloso, ecc...?
fano è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 21:55   #8
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Per poter funzionare devi ovviamente possedere tutto il runtime del c++. Le classi altrimenti come le gestisci?

L'overhead del c++ c'è tutto, altrimenti non funzionerebbe.

Quindi in sostanza nel tuo caso hai un vero e proprio programma c++.

La cosa che mi ha un pò spaventato è che gcc riesce a riconoscere i costrutti del c++ senza problemi. In passato ricordo che funzionava perchè richiamava sottobanco g++, oggi invece ho dovuto notare che non è più così.
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 22:22   #9
Agat
Senior Member
 
L'Avatar di Agat
 
Iscritto dal: Feb 2007
Messaggi: 2516
Più banalmente, un vero compilatore c, con un commento // dovrebbe dare errore
Agat è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 23:14   #10
GByTe87
Senior Member
 
L'Avatar di GByTe87
 
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
Quote:
Originariamente inviato da Agat Guarda i messaggi
Più banalmente, un vero compilatore c, con un commento // dovrebbe dare errore
Eddai, almeno il c99 usiamolo! Oramai dovrebbe essere ben collaudato.
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO
GByTe87 è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 18:37   #11
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
Sapete che una volta Io fui ripreso per un semplice "//" ???

... non scherzo mica eh

Purtroppo la mentalità di molti "Veri Programmatori"(tm) è molto, troppo legato al passato... per loro esiste solo il C (ed è già una cosa da ballerine... fosse per loro si andrebbe a colpi di assembler ) quindi abbiamo che:
  1. Assembeler è roba da "Veri Programmatori"(tm)
  2. C sei una ballerina
  3. C++ è roba da signorine
  4. JAVA sei un po' "equivoco"
  5. C# sei al limite del satanismo
  6. ...ruby on rails? Ti distrai un attimo e hanno già iniziato a farti un bel rogo... SATANISTA!!!!

Quindi mai "//", ma devi sbatterti a fare *\ */ -) e ^-?

I long long? E chell'è mi ficchi tutto in una stringa e mi implementi l'addizione tra stringhe no? In C++... come sei matto? In c, ovviamente... mi scusi padrone

P.S. ciò detto avete provato a compilare un ibrido C/C++ o un C++ vero e proprio?
Io scommetto che i 2 eseguibili hanno dimensioni differenti se compilati da gcc con lstdc++ e da g++!
fano è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 20:55   #12
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da fano Guarda i messaggi
  1. gcc -i test.c -o test ---> NON COMPILA non sa cosa sono new e delete
  2. g++ -i test.c -o test ---> il compilato è un programma C++ il capo mi fa il cullo! Il C++ è VIETATO!
  3. gcc -i test.c -o test -lstdc++ ---> il compilato è un programma C? Che però conosce qualcosa anche del C++... conosce tutto? Tutto, tutto? C++ è una libreria ? Io non credo Comunque il capo è fregato

E' più chiaro qual è il mio dubbio, ora?
SO che (3) va perché l'abbiamo fatto; il programma gira bello sereno ed è in produzione da 2-3 anni (ci passate tutti i giorni se siete d'Incisa e usa il TelePass ) quindi SO che va... ma NON so come fa a farlo

Lo so, lo so certe curiosità a volte è meglio tenersele... ora voi mi dite che NON potrebbe funzionare magar
Uhm, che versione di gcc usate ? Perche' a me risulta che il codice sopra con una versione abbastanza recente di gcc non viene compilato (non riconosce il costrutto new).
Tieni presente che la differenza tra l'usare il g++ e gcc appare non solo in fase di compilazione, ma anche in fase di link, dove vengono aggiunte delle librerie aggiuntive specifiche per il linguaggio (il runtime del c++ ad esempio)
Per cui se tu prima compili un sorgente c++, poi puoi linkarlo usando semplicemente gcc se aggiungi a mano le librerie che servono.
Detto questo pero', ribadisco che secondo me non compila con gcc (a meno che uno non specifichi anche "-x c++" che e' praticamente identico ad usare direttamente g++)
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 20:58   #13
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da fano Guarda i messaggi
Sapete che una volta Io fui ripreso per un semplice "//" ???

... non scherzo mica eh
Se usate una versione non troppo recente del c, i commenti con // non erano previsti per cui e' normale che sia considerato errore (ma qualcuno avrebbe magari dovuto abilitare i flag -ansi per impedire di cadere nell'errore...)
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 21:00   #14
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da Agat Guarda i messaggi
Più banalmente, un vero compilatore c, con un commento // dovrebbe dare errore
Il commento con // era una estensione non standard del gcc, per cui se non usi -ansi (o -pendantic anche ?) te lo da buono
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 21:01   #15
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da fano Guarda i messaggi
Eppure, corregimi, se sbaglio l'assembler ottenuto da GCC e quello ottenuto da G++ è differente, giusto?

Uno ha tutto l'overhead del C++ (ctor, dtor ecc...) l'altro essendo C è quasi assembler di suo
I costruttori e distruttori di default fanno la stessa cosa che fanno in C, ovvero niente. Se non li dichiari a parte non dovrebbe esserci overhead.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2012, 00:11   #16
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
Quote:
Originariamente inviato da marco.r Guarda i messaggi
Uhm, che versione di gcc usate ? Perche' a me risulta che il codice sopra con una versione abbastanza recente di gcc non viene compilato (non riconosce il costrutto new).
Tieni presente che la differenza tra l'usare il g++ e gcc appare non solo in fase di compilazione, ma anche in fase di link, dove vengono aggiunte delle librerie aggiuntive specifiche per il linguaggio (il runtime del c++ ad esempio)
Per cui se tu prima compili un sorgente c++, poi puoi linkarlo usando semplicemente gcc se aggiungi a mano le librerie che servono.
Detto questo pero', ribadisco che secondo me non compila con gcc (a meno che uno non specifichi anche "-x c++" che e' praticamente identico ad usare direttamente g++)
Attualmente 4.6, prima 4.2... direi se non erro sia possibile linkare (non so compilare un intero programma C++) in un programma C una libreria C++ e compilare il tutto con gcc ma è obbligatorio aggiungere tra le librerie libstdc++; è probabile a sto punto sia di fatto ciò che fa g++... l'unica differenza sarebbe nella minor pedanteria del compilatore

Ultima modifica di fano : 16-01-2012 alle 00:14.
fano è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2012, 00:32   #17
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da fano Guarda i messaggi
Attualmente 4.6, prima 4.2... direi se non erro sia possibile linkare (non so compilare un intero programma C++) in un programma C una libreria C++ e compilare il tutto con gcc ma è obbligatorio aggiungere tra le librerie libstdc++; è probabile a sto punto sia di fatto ciò che fa g++... l'unica differenza sarebbe nella minor pedanteria del compilatore
Ah si', ma collegare non e' un problema. D'altra parte puo' effettivamente capitare di dover mettere assieme pezzi di programma generati da linguaggi differenti, anche se non e' molto frequente. Un classico esempio e' mescolare codice Fortran e C. Tieni presente che gcc e g++ di per se' non collegano. Si occupano solo di chiamare ld con i file oggetto e i parametri opportuni.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso CHUWI CoreBook Air alla prova: design premium, b...
Roborock Saros 20: il robot preciso e molto sottile Roborock Saros 20: il robot preciso e molto sott...
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm ASUS ROG Kithara: quando HIFIMAN incontra il gam...
MacBook Neo: nessuna sorpresa nei primi ...
La serie POCO X8 Pro è pronta al ...
Smartphone: 2026 difficile per il mercat...
Star Wars: Knights of the Old Republic R...
Huang, NVIDIA: OpenClaw ha realizzato in...
Annunciano il recupero di 4,8 milioni di...
Oggi degli ottimi auricolari Sony con ca...
Muffa in casa? Questo deumidificatore da...
Sonos Era 100: il punto d'ingresso per u...
"Non stiamo sostituendo nessuno con...
Tutti i robot in offerta ora: prezzi bas...
Fra 3 giorni, a mezzanotte, Amazon attiv...
Il principale limite del MacBook Neo &eg...
899€ in tutti i colori, crolla il prezzo...
Sempre più pubblicità su Y...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:37.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v