PDA

View Full Version : C++


Pipe
17-07-2007, 16:12
Ragazzi come si programma in c++ in linux, ho visto che cambia molto dalla programmazione in c++ dal borland di winbdows..

W.S.
17-07-2007, 16:24
si programma in C++.
A seconda delle librerie grafiche (e non) che vuoi usare cambiano le funzioni, ma il linguaggio rimane quello. A cosa ti riferisci in particolare? All'interfaccia grafica? Per quello vedi "C++ qt3" o "C++ gtk" per trovare qualche doc

Pipe
17-07-2007, 16:50
bhè per il fato che usa librerie diverse... iostream.h non mi sembra neanche contemplato!per es:


#include <iostream.h>

void main(){
cout << "ciao" << endl;
}



su ubuntu mi da degli errori, su windows no... perchè?

W.S.
17-07-2007, 17:10
che errori da?
Vedo che non hai definito il namespace, prova con:

#include <iostream> // per le lib di default non serve .h
using namespace std;

void main(){
cout << "ciao" << endl;
}

se da ancora errori è probabile che ti manchi qualche libreria. Le libc6-dev ci sono?

Pipe
17-07-2007, 17:54
ho capito, ma la mia richiesta non è la correzione di quell'esempio, ma è capire perchè se lo compilo su windows non mi da erore, mentre su linux devo addirittura cambiare il modo di programmare; insomma il c++ è c++ ovunque no?

W.S.
18-07-2007, 08:17
ho capito, ma la mia richiesta non è la correzione di quell'esempio, ma è capire perchè se lo compilo su windows non mi da erore, mentre su linux devo addirittura cambiare il modo di programmare; insomma il c++ è c++ ovunque no?

non devi cambiare modo di programmare, devi solo installare le librerie base che ti mancano ;)

la dichiarazione del namespace dipende da quanto è rigoroso il compilatore, così come il mettere o meno ".h"

Pipe
18-07-2007, 12:17
ok :fagiano: ... un'altra cosa... qual'è la differenza tra g++ e gcc ?sono entrambi compilatori no?

vizzz
18-07-2007, 12:18
ok :fagiano: ... un'altra cosa... qual'è la differenza tra g++ e gcc ?sono entrambi compilatori no?

si il primo per c++ l'altro per c

aik
19-07-2007, 15:13
Il c++ tra windows e linux NON CAMBIA.
probabilmente quello che cambia nel tuo caso è il compilatore, se usavi gcc su windows su linux sarà la stessa cosa.
I compilatori c++ sono abbastanza diversi tra loro perchè alcuni fanno le stesse cose in modo diverso, non seguono alla lettera l'ISO c++,etc..

Guarda che ne pensa Linus Torvalds dei compilatori c++ (e del c++ in generale) (per la programmazione del kernel):


The fact is, C++ compilers are not trustworthy. They were even worse in
1992, but some fundamental facts haven't changed:

- the whole C++ exception handling thing is fundamentally broken. It's
_especially_ broken for kernels.
- any compiler or language that likes to hide things like memory
allocations behind your back just isn't a good choice for a kernel.
- you can write object-oriented code (useful for filesystems etc) in C,
_without_ the crap that is C++.

pfinet
19-07-2007, 16:01
ho capito, ma la mia richiesta non è la correzione di quell'esempio, ma è capire perchè se lo compilo su windows non mi da erore, mentre su linux devo addirittura cambiare il modo di programmare; insomma il c++ è c++ ovunque no?

Una cosa è il linguaggio in se, un'altra sono le librerie a cui ti appoggi per scrivere il tuo programma.

Il linguaggio C++ è sempre quello, cio che cambia da un ambiente all'altro sono le librerie che hai a disposizione, o il modo in cui sono implementate, che puo variare da sistema a sistema.

Tutti i compilatori C++ supportano come minimo una libreria che si chiama C standard library e che fornisce delle funzioni standard, come quelle di iostream.h, math.h etc.

Il codice che hai scritto sopra compila sia su windows che su linux, perche fa uso di funzioni che fanno parte della libreria standard del C, che è implementata appunto sia su windows che su linux.

Eventualmente possono esserci delle differenze, ad esempio sul gcc le librerie standard sono racchiuse nel namespace std in modo da non inquinare lo spazio dei nomi, mentre su windows non sono inserite in alcun namespace.
Ecco perche se non scrivi using namespace std non te lo compila.

Poi ovviamente per fare il tuo programma usi anche delle altre librerie, ad esempio se crei un'interfaccia grafica su windows usi le MFC, su linux le GTK.

Se vuoi scrivere codice portatile sia su windows che su linux per creare programmi complessi senza troppi problemi, devi appoggiarti a un framework multipiattaforma disponibile su entrambe le piattaforme, come le wxWidget o le QT.

Pipe
19-07-2007, 19:53
ho capito...però se utilizzo g++ invece di gcc? devo usare lo stesso using namespace std ?

scusate queste domandine banali, ma sono ancora una piccola schiappa :stordita:

pfinet
20-07-2007, 10:04
Il gcc, che sta per GNU Compiler Collection, è una collezione di compilatori, e il g++ è il front-end del gcc per il linguaggio c++, mentre ad esempio gnat è il front-end che ti permette di compilare codice Ada sempre col gcc, poi c'è quello per Java, Fortran...

Puoi scrivere benissimo

g++ main.cpp

oppure

gcc main.cpp

e funziona allo stesso modo.

Esegui 'info gcc' per leggere la documentazione, c'è scritto tutto quanto.
In particolare, probabilmente ti serve sapere come si linkano delle librerie esterne al tuo programma, da un occhio alle opzioni -l e -L, nella pagina link options.

Se ti serve un IDE, prova Eclipse o kDevelop, mentre se ti serve un GUI designer per disegnare le interfaccie grafiche dipende dalla libreria che usi: glade per le GTK, qtDesigner per le QT, DialogBlocks per le wxWidget...

adalucio
20-07-2007, 10:29
Se vuoi scrivere codice portatile sia su windows che su linux per creare programmi complessi senza troppi problemi, devi appoggiarti a un framework multipiattaforma disponibile su entrambe le piattaforme, come le wxWidget o le QT.

Scusa ma anche le gtk vanno su windows.

o sbaglio?

:D :confused: :D

pfinet
20-07-2007, 10:42
Scusa ma anche le gtk vanno su windows.

o sbaglio?

:D :confused: :D

si, pero è diverso: le wxWidget usano i controlli nativi del sistema su cui il programma viene compilato, mentre le GTK emulano i controlli del sistema sottostante.

Ad esempio, se scrivo questo codice con le wxWidget:

MyFrame *a = new MyFrame(NULL, "CIAO");
a->Show(true);

e lo compilo su windows, mi crea una finestra usando le librerie MFC native di Windows, se lo compilo su Linux mi crea una finestra usando le GTK.
Allo stesso modo, se lo compilo su Mac OS usa le librerie native di quel sistema (che non mi ricordo quali sono :p)

In questo modo ottieni un feel&look del tutto simile all'originale, e le prestazioni sono le stesse di un programma scritto direttamente con le librerie native della piatatforma su cui è compilato.