Ciao a tutti, come ogni studente progetto un po’ di programmi in C++. Quando avevo Windows usavo il dev-c++, ora con fedora ho : eclipse,code-blocks e anjuta.
Come compilatori il top!
Il problema e che quando vado ad esegure non succede nulla, mi spiego, vado a cliccare su run ma non mi apre niente quindi quando devo lanciare il programma,ogni volta lo ricompilo e lo apro manualmente dal Terminale.
Quando esegua file con librerie tipo
iostream
cstdlib
Tutto ok!
Ma quando vado a compilare file con librerie e comando un po’ piu’ “”“complessi”""
windows.h
stdio.h
e vado con istruzioni tipo
_beep
_sleep
e altre, il terminale non mi esegue il programma non riconoscendo le istruzioni.
Quello che volevo sapere/chiedere se potevo trovare un modo per usare le librerie del dev-c++ insieme alle altre per eseguire i programmi,in piu’ volevo sapere in che modi posso eseguire il programmini fatti da me in c++ (terminale, ecc…).
Quelli che hai citato sono degli IDE. Il compilatore da loro usato è sempre uno solo: l’ottimo gcc (o g++ per il c++).
windows.h è una libreria in C per accedere alle API di windows. Niente a che fare con linux.
3)stdio.h è per l’io in C, non C++.
4)se non ricordo male __beep e __slepp non sono macro standard. Per il beep non saprei, ma per lo sleep puoi usare la funzione sleep dello standard posix oppure nanosleep mi pare contenuta in time.h [ma è un bel po’ che non programmo in c++ potrei sbagliarmi]
5)non capisco cosa intendi con librerie di dev-c++.
6)per compilare come dicevo prima in linux si usa gcc o g++. se da terminale dai
man gcc
o
man g++
ti spiega tutte le opzioni del compilatore. Comunque per un uso standard se dai
g++ nomefilesorgente.cpp -o nomeeseguibile
compili il file nomefilesorgente.cpp creando il file nomeeseguibile.
Se provi a compilare da terminale gli esercizi che stai facendo che errori ti da?
Se hai ancora tutte queste incertezze ti consiglierei di evitare di usare ide per adesso e usare solo un editor di testo + compilatore da terminale. Quando poi ti saranno chiari vari concetti e dovrai fare progetti grandi allora ti verrà comodo usare un ide.
Ho capito!
Quindi in breve una buona parte dei comandi del c e del c++ cambiano tra windows linux, comprese librerie e se voi far patire un programma fatto per esempio dal programma dev-c++ di windows su linux devi cambiare il file sorgente con istruzioni che riconosce il copilatore di linux. Ho capito bene?
Strano perché credevo che il c++ era un linguaggio univoco e credevo che cambiavano solo le librerie.
Comunque se si, dove posso trovare tutti i comandi con affianco il loro utilizzo per GNU ?
(esempio for,ecc…)
Per Astharoth:
-per “librerie del dev-c++” mi riferivo alle librerie del programma che usavo con windows (dev-c++ appunto).
-gli errori che mi da’il compilatore sono:
[root@pc Silvio]# g++ /home/Silvio/Scrivania/prova.cpp -o prov
/home/Silvio/Scrivania/prova.cpp:1:22: error: iostream.h: No such file or directory
/home/Silvio/Scrivania/prova.cpp:3:20: error: windows.h: No such file or directory
/home/Silvio/Scrivania/prova.cpp:8: error: ‘DWORD’ does not name a type
/home/Silvio/Scrivania/prova.cpp: In function ‘int main()’:
/home/Silvio/Scrivania/prova.cpp:48: error: ‘DWORD’ was not declared in this scope
/home/Silvio/Scrivania/prova.cpp:48: error: expected ;' before ‘dwThreadId’ /home/Silvio/Scrivania/prova.cpp:50: error: ‘HANDLE’ was not declared in this scope /home/Silvio/Scrivania/prova.cpp:50: error: expected ;’ before ‘thread’
/home/Silvio/Scrivania/prova.cpp:58: error: ‘_beep’ was not declared in this scope
/home/Silvio/Scrivania/prova.cpp:59: error: ‘_sleep’ was not declared in this scope
Comunque il dev-c++ è un progetto vecchio e il compilatore gcc allegato al pacchetto potrebbe essere vecchio rispetto a quello che hai installato in fedora.
Comunque non sbagli con:
Metti tutto al presente, le librerie possono cambiare come essere le stesse.
Hai provato a compilare con gcc invece che con g++?
[quote]/home/Silvio/Scrivania/prova.cpp:1:22: error: iostream.h: No such file or directory
/home/Silvio/Scrivania/prova.cpp:3:20: error: windows.h: No such file or directory[/quote]
Come ti ha suggerito Astharoth la libreria windows.h non funziona con linux, per quanto riguarda iostream puoi semplicemente includere la libreria nel programma digitando include
non serve altro, (il .h non è necessario)
Non so a che scopo stai usando DWORD, se è una variabile non l’hai dichiarata altrimenti molto probabilmente non hai inserito la libreria corretta, lo stesso vale per HANDLE, _beep e _sleep
per quotare virus:
[quote]/home/Silvio/Scrivania/prova.cpp:48: error: expected ;' before ‘dwThreadId’ /home/Silvio/Scrivania/prova.cpp:50: error: expected ;’ before ‘thread’[/quote]
Riguarda la sintassi del comando probabilmente hai perso un ‘;’ come ti suggerisce il compilatore
Consiglio strettamente personale: scrivi il programma con un editor di testo come gedit o kate (che tra l’altro supportano la formattazione c++ e ti semplificano il lavoro) poi salva il file in formato .cpp e semplicemente compila come ti ha suggerito Astharoth usando c++. Veramente non credo ci sia niente di più semplice!
Spero di essere stato d’aiuto e non aver detto cose scontate.
Straight
Devi fare una distinzione tra la sintassi del c++ e le librerie aggiuntive che vai ad usare. I comandi del c++ a parità di versione sono tutti uguali tra sistemi operativi. Anche molte librerie standard sono in comune (vedi la standard template library). Ma alcune no. Ad esempio è ovvio che le API di windows le usi solo su windows. Le macro __beep e __sleep da te citate ad esempio NON sono fanno parte delle specifiche del linguaggio. E se vogliamo essere precisini non fanno parte di nessuno standard. Evita di usarle. Ti ritrovi con un codice poco portabile e relegato ad un particolare compilatore. Impara ad usare librerie largamente riconosciute e facenti parte di uno standard come ad esempio quello POSIX.
Dai un occhiata a questo http://www.cppreference.com/wiki/ per le reference delle librerie standard del C++ (che vanno su tutti i sistemi operativi). Però non fare confusione, la sintassi del C++ è sempre la stessa!
Qui noto la stessa confusione (lo so sono pesante :-)). Dev-c++ non ha librerie “sue”. Quelle che tu usavi sono librerie si sistema di windows che vanno a chiamare delle API interne al s.o e in quanto tali funzionano e hanno senso di essere usate solo in ambiente windows. Le stesse api le puoi richiamare in C,C#, visualbasic e qualsiasi altro linguaggio per cui esiste un wrapper di tali funzioni.
Non so su che libro vi hanno fatto studiare c++ ma l’uso di iostream.h è deprecato da più di 10 anni (ho un manuale di c++ di 9 anni fa che già mi avvertiva di tale cosa). Nei compilatori “moderni” basta usare
#include < iostream >
senza spazi tra le parentesi angolari e iostream. Li ho dovuti mettere perché se no le regole di sicurezza del forum mi cancellavano le parentesi angolari eheh.
Ripeto che la libreria di windows c’è solo su windows [non è necessariamente vero ma qua il discorso diventa lungo]. Che API usavi che ti costringevano ad usare tale libreria? Non mi pare un utilizzo comune per degli esercizi di c++.
il tipo di dato dword è una creazione delle librerie microsoft se non erro. Non fa parte del linguaggio c++. Volendo puoi usare un typedef per definirlo. Ma rimuovendo la libreria microsoft e relative funzioni anche tale tipo inventato non ti sarà più utile.
la funzione dwThreadId è sempre delle librerie microsoft. Se ti serve usare i thread fai riferimento allo standard posix (libreria pthread).Trovi molti tutorial in rete se vuoi. Se qualcuno conosce altre librerie per gestire i thread multipiattaforma si faccia vivo! Io in università usavo questa.
[quote]
/home/Silvio/Scrivania/prova.cpp:50: error: ‘HANDLE’ was not declared in this scope
/home/Silvio/Scrivania/prova.cpp:50: error: expected `;’ before ‘thread’
/home/Silvio/Scrivania/prova.cpp:58: error: ‘_beep’ was not declared in this scope
/home/Silvio/Scrivania/prova.cpp:59: error: ‘_sleep’ was not declared in this scope
:-D[/quote]
tutti questi altri errori sono dati dal fatto che non esistendo la libreria windows questi comandi non vengono riconosciuti.
Spero di averti chiarito qualche dubbio. In caso comunque siamo sempre a disposizione!
EDIT: ops! Scusa straight. Ci ho messo troppo a scrivere il post eheh.
Molto bene,quindi i codici che uso non vanno bene perche sono strettamente legati a windows o rilegati a certi tipi di compilatori per questo non vengono riconoscuti.
Devo quindi prendere comandi piu’ globali che fanno parte di uno standard, come esempio Poxis, ed evitare di usare macro non specifiche del linguaggio.
Cerchero’ poi di iniziare scrivendo il codice con un editor d testo (es: gedit) ricordando di salvare il formato su “.cpp” (in caso di un programma c++) compilando poi con il terminale in questo modo:
g++ /percorso del file/file.cpp -o prova
ricordando che “prova” e’ il nome del file eseguibile.
Ecco il riassunto dei link utili utilizzati nella discussione:
-file:///home/Silvio/Scrivania/C++ Reference [C++ Reference].html — per le referenze delle librerie standard del C++ che vanno su tutti i sistemi operativi!
-file:///home/Silvio/Scrivania/a2768.htm — funzione file di intestazione unistd.h che raccoglie un po’ di tutto riguardante le estensioni Posix.
Ecco qua ho ricapitolato tutto cosi’ chi avra’ il mio stesso problema riuscira’ a capire meglio
Ringrazio mille volte : Astharoth,virus,MarioS e straight
Adesso sta a me mettermi sotto a imparare cose nuove!