Newsgroup: it.comp.os.linux.development
Titolo: Programmare in C o C++ ?

Lo so che dipende dal tipo di applicazione che uno deve fare.
Perņ so per in Linux esistono molte librerie C mentre non conosco un 
archivio di oggetti C++ come per esempio in Java.
Suggerimenti ?
Grazie 1000

Ciao, Andrea!
Il giorno 10/09/2003 alle ore 17:26 hai scritto:
 AG> Lo so che dipende dal tipo di applicazione che uno deve fare.
 AG> Perņ so per in Linux esistono molte librerie C mentre non conosco un
 AG> archivio di oggetti C++ come per esempio in Java.
 AG> Suggerimenti ?
In C++ puoi usare tranquillamente le stesse librerie previste per il C.
Bye

 Suggerimenti ?
Direi che devi decidere a monte, C e C++ sono due linguaggi diversi
-- 
Lawrence "Rhymes" Oluyede
http://loluyede.blogspot.com
rhy...@NOSPAMmyself.com

 C.
Ma daaai... non è assolutamente vero!
Più corretto sarebbe dire che, data la somiglianza dei due linguaggi,
un porting C -> C++ non è impossibile (e a volte è banale), ma
certamente può rivelarsi insidioso.
-- 
Gerolamo

 Ma daaai... non č assolutamente vero!
ma che dici ?
mi fai un esempio di libreria C che non si puo' usare in c++ ?
---
Matic

 mi fai un esempio di libreria C che non si puo' usare in c++ ?
penso nessuna ... previo massimo qualche dichiarazione in piu' o in meno
negli header prima di linkare la libreria statica o dinamica ...
al massimo le insidie se si tenta di compilare i sorgenti c in c++ ma anche
li basta un po' di olio di gomito e sistemare qualche cast dichiarazione ecc
... e poi tutto funziona ...
ciao

 negli header prima di linkare la libreria statica o dinamica ...
La prima che mi viene in mente: libscg usata da cdrdao.
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
           -<! GOD is real, unless declared as integer !>-

 dichiarazione ecc ... e poi tutto funziona ...
Non noti una leggera contraddizione nelle tue frasi?
Dici che tute le librerie C funzionano compilandole in C++ e subito
dopo dici che "basta" aggiustare qualcosina per farle funzionare...
Anche ammesso che si tratti solo di aggiustatine (ma bisogna sapere
quel che si fa, credimi...) direi che la frase iniziale:
"In C++ puoi usare tranquillamente le stesse librerie previste
per il C."
continua ad essere inesorabilmente falsa.
-- 
Gerolamo

Ciao, Gerolamo!
Il giorno 10/09/2003 alle ore 22:49 hai scritto:
 G> Ma daaai... non è assolutamente vero!
Su questo ti hanno gia' risposto quindi evitero' di insultarti, anche
perche' e' evidente la tua mancanza di esperienza.
 G> Più corretto sarebbe dire che, data la somiglianza dei due linguaggi,
 G> un porting C -> C++ non è impossibile (e a volte è banale), ma
 G> certamente può rivelarsi insidioso.
Chi ha parlato di porting ? Si parlava di librerie, qualsiasi libreria C
puo' essere utilizzata in C++.
Bye

Ciao, Gerolamo!
Il giorno 11/09/2003 alle ore 14:49 hai scritto:
 G> Anche ammesso che si tratti solo di aggiustatine (ma bisogna sapere
 G> quel che si fa, credimi...) direi che la frase iniziale:
 G> "In C++ puoi usare tranquillamente le stesse librerie previste
 G> per il C."
 G> continua ad essere inesorabilmente falsa.
Tu continui ad essere insesorabilmente in errore, ma come ho detto questo e'
dovuto alla tua scarsa esperienza di programmazione, tuttavia ti esorterei a
non sentenziare se non conosci la materia.
Per quanto riguarda le modifiche da fare si tratta semplicemente di
dichiarare le funzioni negli include come 'extern "C"' affinche' il linker
sia in grado di trovarle, perche' infatti l'unico problema che ti puo'
capitare usando una libreria scritta in C e' appunto quello che il linker
non riesca a linkare le funzioni, cosa che comunque non mi capita da almeno
cinque o sei anni, visto che per un qualsiasi programmatore rendere un
include compatibile C++ e' un'operazione da 5 secondi. Non mi sembra una
cosa cosi' complicata.
Bye

 libreria C puo' essere utilizzata in C++.
Bene. Cosa intendi per "utilizzare in C++"?
Io ho inteso "prendere il sorgente e compilarlo con un compilatore
C++".
Se intendi altro allora nulla da dire, ma mi interesserebbe capire.
Se, invece, intendi questo allora l'incompetente non sono io.
-- 
Gerolamo

Ciao, Gerolamo!
Il giorno 11/09/2003 alle ore 16:27 hai scritto:
 G> Bene. Cosa intendi per "utilizzare in C++"?
 G> Io ho inteso "prendere il sorgente e compilarlo con un compilatore
 G> C++".
Io intendo installare una libreria, inserire il relativo #include nel
sorgente, scrivere le procedure che usano le funzioni esportate, compilare,
linkare ed eseguire. Che senso avrebbe compilare una libreria scritta in C
con un compilatore C++ ?
Bye

 libreria scritta in C con un compilatore C++ ?
Se prescindi dal "compilare" allora il linguaggio del sorgente è irrilevante
ai fini del discorso, no? (cfr la domanda dell'OP)
-- 
Gerolamo

 irrilevante ai fini del discorso, no? (cfr la domanda dell'OP)
Temo di no. Per esempio ci possono essere diverse convenzioni sul passaggio
dei parametri a seconda del linguaggio. Inoltre ti serve qualcosa (un header
file nel caso del C/C++) che descriva la funzione che stai chiamando in modo
che il compilatore sappia che parametri debbano essere passati e cosa
aspettare come ritorno, e non sempre te lo trovi gia' pronto (certo,
potresti scrivertelo, ma devi farlo tu).
Infine se stai programmando in C e vuoi utilizzare una funzione che si
aspetta come parametro un oggetto come pensi di passarglielo?
Il vantaggio del C++ e' che prevede l'esistenza del C quindi ci sono dei
meccanismi ben definiti per poter utilizzare codice e librerie scritte in C,
mentre fare il contrario potrebbe non esere fattibile.
Alessandro.

Ciao, Gerolamo!
Il giorno 11/09/2003 alle ore 18:09 hai scritto:
 G> Se prescindi dal "compilare" allora il linguaggio del sorgente è
 G> irrilevante ai fini del discorso, no? (cfr la domanda dell'OP)
Ovviamente che prescindo dal compilare, una libreria si dovra' compilare con
il suo linguaggio. Il discorso riguardava l'usare una libreria C in C++ e
non compilarla.
Bye

 scritte in C, mentre fare il contrario potrebbe non esere fattibile.
Si, ma ci sono delle incompatibilità tra i due linguaggi.
Stroustrup dedica alcune pagine del suo libro all'argomento, ma
anche on line si trovano documentazioni, come ad esempio qui:
http://david.tribble.com/text/cdiffs.htm
Si tratta per lo più di controllare cast e keyword, ma anche di tipi
primitivi diversi (bool da una parte e long long dall'altra,...), ma
altri comportamenti più subdoli possono sfuggire a un porting
poco accurato (const linkage, i doppi '__' nei nomi delle funzioni,
ecc...)
Detto questo, volevo solo aggiungere che non era mia intenzione
scatenare un flame, ma solo fare una puntualizzazione che mi
pareva pertinente a quanto chiesto dall'OP.
Tuttavia le considerazioni, magari giuste, ma certamente un po'
affrettate su "evidente mancanze di esperienza" e simili mi
lasciano un po' freddino come prima impressione su 
I.C.O.L.dev
.
Speriamo che il seguito sia meglio.
Saluti
-- 
Gerolamo

 puo' essere utilizzata in C++.
Premesso che sono un principiante, io sapevo di piccole ma significative
differenze fra C e C++. Una cosa del tipo
int FuncA();
è una dichiarazione di funzione che ha un significato diverso fra C e C++.
Ci sarebbe poi il discorso dei vari cast C-like che nel nuovo standard C++
non sono piu' accettati (benchè ancora vengano compilati sebbene Gcc segnali
un warning) per favorire l'uso dei vari static cast<>(x)
Ma, ripeto, io sono alle prime armi con il C++ e non ho esperienza di C ne
delle evoluzioni del suo standard, quindi mi rimetto al giudizio di gente
piu' esperta di me.
Un saluto


Se vuoi farti un idea del clima puoi anche consultare gli archivi del
gruppo...
Ciao.
Alessandro.

Ciao, Wintermute!
Il giorno 11/09/2003 alle ore 21:40 hai scritto:
 W> Premesso che sono un principiante, io sapevo di piccole ma significative
 W> differenze fra C e C++. Una cosa del tipo
 W>
 W> int FuncA();
 W>
 W> è una dichiarazione di funzione che ha un significato diverso fra C e
E che differenza dovrebbe esserci ? E' una funzione che ritorna un int e non
ha argomenti, le uniche differenze sono interne al compilatore, per esempio
in C++ non appartiene a nessuna classe. Se quella funzione la compili in C
in una libreria viene esportata con un nome ben preciso (_FuncA se non
ricordo male) mentre in C++ il nome viene rimaneggiato per identificare sia
la classe di appartenenza (in questo caso nessuna) sia il valore di ritorno
e gli argomenti previsti in modo da poter gestire l'overload. Questa e'
l'unica differenza. Per ovviare a questo "problema" si deve aggiungere una
dichiarazione del tipo:
#ifdef __cplusplus
extern "C" {
#endif
int FuncA();
#ifdef __cplusplus
};
#endif
che forza la calling convention del C se compilato con un compilatore C++ e
la rende compatibile sia con il C che con il C++, indipendentemente dal
linguaggio di origine. Chiaramente non puoi esportare una classe C++ in
questo caso devi creare delle funzioni helper.
 W> C++. Ci sarebbe poi il discorso dei vari cast C-like che nel nuovo
 W> standard C++ non sono piu' accettati (benchè ancora vengano compilati
 W> sebbene Gcc segnali un warning) per favorire l'uso dei vari static
 W> cast<>(x)
Questo e' irrilevante nell'uso di librerie.
Bye

Ciao, test!
Il giorno 11/09/2003 alle ore 22:00 hai scritto:
 t> Io avevo in mente l'uso della keyword PASCAL nella dichiarazione di
 t> alcune funzioni in C. Non so se' e' un problema di compilatore o meno...
La keyword pascal (come altre dichiarazioni similari, ad esempio fastcall
(che credo sia prerogativa dei compilatori Windows), stdcall, ecc.
definiscono il protocollo di scambio dei dati tra chiamante e chiamato. Per
esempio (vado a memoria pero' quindi potrei dire delle inesattezze) sia in C
che in Pascal gli argomenti vengono passati sullo stack ma in C l'ordine e'
inverso rispetto al Pascal, ancora in C lo stack viene liberato da chi
chiama la funzione mentre in pascal lo stack e' liberato dalla funzione
chiamata (per questo se in C gli include non sono perfettamente aggiornati
si possono fare casini inenarrabili). Tutte cose che il compilatore deve
tenere in considerazione e che sono le fonti di incompatibilita' tra
linguaggi diversi, ma facilmente superabili.
 >> Questo non l'ho mai detto.
 >> Si parlava di  C -> C++  non di C++ -> C
 >>
 t> Ma tra le quale e' la situazione migliore?
Come gia' detto qualsiasi libreria prevista per il C puo' essere utilizzata
in C++ ma non viceversa.
Bye

 Ma tra le quale e' la situazione migliore?
Credo proprio che sia meglio C -> C++
Anche se i primi compilatori C++ non erano altro che dei traduttori
C++ -> C, quindi...
-- 
Gerolamo

  W> cast<>(x)
Che versione del GCC segnala warning sui cast C-like?
Perlomeno con -Wall (non ho provato pedantic) la 3.2.3 che uso 
abitualmente per fortuna non ne segnala :)
Bye,
  Gabry

 Stroustrup dedica alcune pagine del suo libro all'argomento, ma
quelle sono piccole incompatibilita' di compilazione, in cui incorri
quando tenti di compilare codice C con un compilatore C++. Ma nel
thread se non sbaglio si parlava semplicemente di utilizzare una
libreria C in un programma C++, quindi la libreria e' gia' compilata,
si tratta solo di eseguirne le funzioni. E questo, nel caso in
questione, si puo' fare sempre, a patto che si sia istruito di
compilatore affinche' usi per quelle funzioni le direttive di
collegamento del C (extern "C" blablabla).
-- 
There are only 10 kinds of people in the world --
Those who understand binary, and those who don't.

 ha argomenti,
Questo  e` vero  in C++. In  C,  come ha  giustamente detto  Wintermute,
quella  cosa  (non prototype-format  parameter  type  declarator) ha  un
significato  diverso. Indica  al  compilatore che  esiste  una  funzione
FuncA, che la funzione ritorna un  int, e che non verranno fornite altre
informazioni sul tipo e sul numero di parametri.
Se nella  TU non  viene incotrato  il prototipo  o la  definizione della
funzione stessa allora il compilatore non effettuera` _nessun_ controllo
sul numero  e sul  tipo degli  argomenti passati. Saranno  quindi legali
tutte queste cose:
FuncA();
FuncA("foobar");
FuncA("foobar", 123);
FuncA("foobar", 123, 3.14);
ecc.
Kronos
-- 
Home: 
http://kronoz.cjb.net
"L'ottimista pensa che questo sia il migliore dei mondi possibili. 
 Il pessimista sa che e` vero" -- J. Robert Oppenheimer

 Suggerimenti ?
STL ? La Standard Template Library ha un sacco di oggetti, container e
iteratori che semplificano molto la programmazione, fornendo codice robusto
e affidabile, a meno ché tu non debba creare software di sistema, ti
consiglio di usare C++ con STL, poi se hai librerie specifiche, anche in C,
usale pure.
Puoi usare le librerie C in codice C++.
Fai il tuo programma, crei le tue classi e chiami quando serve le librerie
C.